[알고리즘] 자바스크립트(node.js)로 코테 준비하기 #1 입력 받기

navyjeongs·2023년 3월 27일
1

알고리즘

목록 보기
2/2
post-thumbnail

지금까지 C++ 혹은 파이썬으로 백준 알고리즘 문제를 풀다가 프론트엔드로 취업을 하기위해 자바스크립트(node.js)로 코테를 준비하려고 한다.

자바스크립트로 백준 문제를 풀면서 겪은 문제들을 하나씩 포스팅할 예정이다.

처음으로는 입력이다.

1. 한 줄 입력받기

다음을 입력받으려고 할 때 어떻게 해야할까?

예제 입력 1
1 2

nodejs로 입력을 받는 방법에는 여러가지가 있지만 나는 fs모듈을 사용하여 입력받는 것을 선호한다. fs모듈은 직접 입력 파일을 읽는다는 특징이 있다. 아래는 fs모듈을 사용하여 입력을 받는 방법이다.

1) fs모듈을 불러오기

const fs = require("fs");

2) readFileSync()를 사용하여 입력받기

입력을 받은 후, 이후 코드를 실행하기 위해 동기적으로 파일을 읽는 readFileSync를 사용한다. 백준에서 입력파일의 위치는 "/dev/stdin"이다.

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin");
  • 나는 아래와 같이 한줄로 작성하는 것을 선호한다.
const input = require("fs").readFileSync("/dev/stdin");

3) toString()을 사용하여 문자열로 변환

readFileSync()의 반환 값은 Buffer 객체이므로 문자열로 변환해주기 위해 toString()을 사용한다.

3-1) toString() 사용x

toString()을 사용하지 않고 input을 출력하면 다음이 출력한다.

const input = require("fs").readFileSync("/dev/stdin").toString();

console.log(input);
// <Buffer 31 20 32> 출력

3-2) toString() 사용o

const input = require("fs").readFileSync("/dev/stdin").toString();

console.log(input);
// 1 2 출력

4) trim()을 사용하여 문자열 양 끝의 개행문자 제거

가끔 입력을 받다보면 문자열의 끝에 개행문자(\n)가 포함되어 있는 경우가 있으므로 개행문자 제거를 위해 trim()을 사용한다.

const input = require("fs").readFileSync("/dev/stdin").toString().trim();

console.log(input);
// 1 2 출력

5) split으로 문자열 나누기

현재 input은 "1 2"이므로 공백을 기준으로 문자열을 나누면 된다.

const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ");

console.log(input):
// ['1','2'] 출력

6) String타입을 Number타입으로 변환하기

우리는 "1"과 "2"를 String이 아닌 Number로 사용하고 싶으므로 Number타입으로 변환해야한다.

숫자로 변환하는 방법에는 세 가지가 있다.

6-1) Number()사용

const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ");
let N = Number(input[0]);

6-2) 단항 연산자 +사용

const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ");
let N = +input[0];

나는 주로 6-2를 선호한다.

6-3) map(Number)을 사용하여 배열 전체를 숫자로 바꾸는 방법

현재 input[0]에는 "1"이 input[1]에는 "2"가 저장되어있는데 일일이 단항 연산자를 사용하지 않고 한번에 숫자로 변환하는 방법이다.

const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ").map(Number);

위와 같이 작성하면 input[0]에는 숫자1이 input[1]에는 숫자 2가 저장된다.

2. 여러 줄 입력받기

위에서는 한 줄을 입력받았지만 BFS등의 입력은 여러 줄에 걸쳐서 받는다. 이럴 때는 어떻게 해야할까?

예제 입력 2
1 2
2 3
1 5
5 2
5 6
4 7

  • 1에서는 공백문자를 기준으로 문자열을 나눴다면 개행문자를 기준으로 문자열을 나눈다. split("\n")을 사용
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차원 배열에 저장하는 방법은 다음 포스팅에서 계속한다.

오류가 있으면 댓글로 알려주세요.

profile
Front-End Developer

0개의 댓글