지금까지 C++ 혹은 파이썬으로 백준 알고리즘 문제를 풀다가 프론트엔드로 취업을 하기위해 자바스크립트(node.js)로 코테를 준비하려고 한다.
자바스크립트로 백준 문제를 풀면서 겪은 문제들을 하나씩 포스팅할 예정이다.
처음으로는 입력이다.
다음을 입력받으려고 할 때 어떻게 해야할까?
예제 입력 1
1 2
nodejs로 입력을 받는 방법에는 여러가지가 있지만 나는 fs모듈을 사용하여 입력받는 것을 선호한다. fs모듈은 직접 입력 파일을 읽는다는 특징이 있다. 아래는 fs모듈을 사용하여 입력을 받는 방법이다.
const fs = require("fs");
입력을 받은 후, 이후 코드를 실행하기 위해 동기적으로 파일을 읽는 readFileSync를 사용한다. 백준에서 입력파일의 위치는 "/dev/stdin"이다.
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin");
const input = require("fs").readFileSync("/dev/stdin");
readFileSync()의 반환 값은 Buffer 객체이므로 문자열로 변환해주기 위해 toString()을 사용한다.
toString()을 사용하지 않고 input을 출력하면 다음이 출력한다.
const input = require("fs").readFileSync("/dev/stdin").toString();
console.log(input);
// <Buffer 31 20 32> 출력
const input = require("fs").readFileSync("/dev/stdin").toString();
console.log(input);
// 1 2 출력
가끔 입력을 받다보면 문자열의 끝에 개행문자(\n)가 포함되어 있는 경우가 있으므로 개행문자 제거를 위해 trim()을 사용한다.
const input = require("fs").readFileSync("/dev/stdin").toString().trim();
console.log(input);
// 1 2 출력
현재 input은 "1 2"이므로 공백을 기준으로 문자열을 나누면 된다.
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ");
console.log(input):
// ['1','2'] 출력
우리는 "1"과 "2"를 String이 아닌 Number로 사용하고 싶으므로 Number타입으로 변환해야한다.
숫자로 변환하는 방법에는 세 가지가 있다.
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ");
let N = Number(input[0]);
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ");
let N = +input[0];
나는 주로 6-2를 선호한다.
현재 input[0]에는 "1"이 input[1]에는 "2"가 저장되어있는데 일일이 단항 연산자를 사용하지 않고 한번에 숫자로 변환하는 방법이다.
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ").map(Number);
위와 같이 작성하면 input[0]에는 숫자1이 input[1]에는 숫자 2가 저장된다.
위에서는 한 줄을 입력받았지만 BFS등의 입력은 여러 줄에 걸쳐서 받는다. 이럴 때는 어떻게 해야할까?
예제 입력 2
1 2
2 3
1 5
5 2
5 6
4 7
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");
console.log(input)
// ['1 2', '2 3', '1 5', '5 2', '5 6', '4 7'] 출력
위의 입력을 2차원 배열에 저장하는 방법은 다음 포스팅에서 계속한다.
오류가 있으면 댓글로 알려주세요.