본문 바로가기
Algorithm

99클럽 코테 스터디 1일차 TIL - JavaScript로 백준 코딩테스트 풀기

by 륜곰 2025. 4. 1.

 

드디어 코딩테스트를 본격적으로 건드려보기 시작했다. 아니 그런데, 내 주 언어는 JavaScript인데 프로그래머스에서는 편하게 풀 수 있었던것에 반해 백준은... 내가 입력값을 직접 상세하게 일일히 손봐야하는 일종의 전처리...느낌의 손처리 과정이 필요했다. 같은 js이지만 node문법을 이용하여, 잘 보지 못했던 require메서드를 사용한다던가 해서... 그래서 내 메인언어인 짜스로 코테를 계속 풀어나가기 위해, 기본 설정 셋팅을 알아보고자 한다.

일단 완성된 셋팅코드부터 보도록 해보자.

const fs = require("fs");
let input = fs.readFileSync(0, "utf-8").toString().split("\n");

/**
입력값 : 
3 3
1
2
3

출력값 : 
[ '3 3\r', '1\r', '2\r', '3' ]
*/

 

 

으 뭔가 복잡복잡시럽다. 중요한것은 입력값을 input 배열로 받아오되, fs라는 file syetem 모듈에 의하여 파일을 불러오고, 문자열로 파싱하고, 개행문자가 나오면 하나씩 잘라줘서 문단으로 들어올 경우 그걸 배열로 만들어서 input에 더해준다. 대부분의 입력값이 위 예제처럼 여러 개행문자값에 걸쳐져서 문제가 제시되므로 해당 값을 적절하게 쪼개서 내가 사용하기 편하기 가공해야 한다. 여기에서 나는 저 \r 개행문자가 뭔가 꼴뵈기 싫어서 다음과 같이 map으로 해당 조건을 조작해서 내 입맛에 맞게끔 이중배열 형태로 만들었다.

const fs = require("fs");
let input = fs
  // .readFileSync(0, "utf-8")
  .readFileSync("./example.txt")
  .toString()
  .split("\n")
  .map((line) => line.replace("\r", "").split(" "));

/**
입력값 : 
3 3
1
2
3

출력값 : 
[ [ '3', '3' ], [ '1' ], [ '2' ], [ '3' ] ]
*/

 

 

그런데 가만보면 위에 .readFileSync() 메서드의 매개변수가 각각 다른것을 알 수 있다. 해당 메서드는 input값이 존재하는 file 위치를 어디서 불러와서 파싱하는지 지정해주는 함수인데, 나같은 경우 로컬에서 실행할때는 동일 레이어 경로상에 example.txt 파일을 만들어서 해당 파일에 문제의 조건 input 값을 넣어서 풀고, 제출할때는 해당 utf-8파싱 매개변수가 존재하는 readFileSync 메서드를 활성화해서 제출한다.

 

나머지는 배열 메서드를 활용해서 가공된 해당 input값을 입맛에 맞게끔 가공하면 된다. 저 케이스에서 예를 들어보면 첫번째 값에 num1, num2라는 값을 각각 가지도록하고 나머지 값들은 전개연산자로 담아서 solution 함수에 넘겨주도록 만든다.

const fs = require("fs");
let input = fs
  // .readFileSync(0, "utf-8")
  .readFileSync("./example.txt")
  .toString()
  .split("\n")
  .map((line) => line.replace("\r", "").split(" "));

const [[num1, num2], ...rest] = input;

function solution(num1, num2, rest) {
  console.log(num1, num2, rest);
  /*
  3, 3, [ [ '1' ], [ '2' ], [ '3' ] ]
  */
}
solution(num1, num2, rest);

 

해당 조건들을 이용해서 내가 원하는 값으로 끌어다 쓰면 프로그래머스처럼 편하게 사용할 수 있고 한편으로는 프로그래머스 보다 더 내 입맛에 맞게끔 조건을 활용할 수 있다.