Node.js로 백준 풀 때

yejichoi·2023년 3월 3일
0

알고리즘 스터디

목록 보기
18/153
post-thumbnail

현대엔지비 코테 준비하면서 입력 방식이 백준과 똑같다는걸 알게되고 급하게 백준을 검색하게 되었다.
프로그래머스는 단순 알고리즘만 입력하면 끝나는데 여긴 input도 내가 직접 설정해줘야 하는 번거로움이...
(그래서 망했,,🥹) 뭐 어쨋든 이제라도 알게되서 다행이고 앞으로는 백준 문제들도 꾸준히 풀어보려고 한다.

fs모듈

// 1. 하나의 값을 입력받을 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim();

// 2. 공백으로 구분된 한 줄의 값들을 입력받을 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ');

// 3. 여러 줄의 값들을 입력받을 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

// 4. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄에 공백으로 구분된 n개의 값들을 입력받을 때
const [n, ...arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);

// 5. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄부터 n개의 줄에 걸쳐 한 줄에 하나의 값을 입력받을 때
const [n, ...arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

// 6. 하나의 값 또는 공백으로 구분된 여러 값들을 여러 줄에 걸쳐 뒤죽박죽 섞여서 입력받을 때
// ex) n 입력 - 공백으로 구분된 n개의 값 입력 - m 입력 - 여러 줄에 걸쳐 m개의 값 입력
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);
const n = input[0];
const n_arr = input.slice(1, n+1);
const [m, ...m_arr] = input.slice(n+1);

// 2~6에서 입력받는 값들을 모두 String에서 Number로 바꾸려면 split()뒤에 .map(Number)를 추가

문자열 값을 입력받는 것이라면 toString()을 왜?

require("fs").readFileSync("/dev/stdin")의 반환값은 문자열이 아닌 Buffer 객체readFileSync의 인수로 인코딩을 지정해주지 않으면 Buffer 객체를 반환 -> 문자열로 바꾸어주지 않으면 예기치 못한 오류가 날 수 있음

trim( ) ?

일부 입력값의 마지막에 개행문자가 포함된 경우가 종종 있다. 이런 경우 split("\n")할 경우 공백문자 하나를 더 갖는 배열을 반환한다. 이를 방지하기 위해서 trim( )을 사용

const text = '가\n나\n다\n';
console.log(text.split('\n')); // ['가', '나', '다', '']
console.log(text.trim().split('\n')); // ['가', '나', '다']

2. 공백으로 구분된 한 줄의 값들을 입력받을 때

3. 여러 줄의 값들을 입력받을 때

4. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄에 공백으로 구분된 n개의 값들을 입력받을 때

(n 말고 x도 있어서 const [n, x, ...arr]로 풀면 ok )

5. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄부터 n개의 줄에 걸쳐 한 줄에 하나의 값을 입력받을 때

6. 하나의 값 또는 공백으로 구분된 여러 값들을 여러 줄에 걸쳐 뒤죽박죽 섞여서 입력받을 때

ex) n 입력 - 공백으로 구분된 n개의 값 입력 - m 입력 - 여러 줄에 걸쳐 m개의 값 입력

참고 포스팅 : https://tesseractjh.tistory.com/39

0개의 댓글