현대엔지비 코테 준비하면서 입력 방식이 백준과 똑같다는걸 알게되고 급하게 백준을 검색하게 되었다.
프로그래머스는 단순 알고리즘만 입력하면 끝나는데 여긴 input도 내가 직접 설정해줘야 하는 번거로움이...
(그래서 망했,,🥹) 뭐 어쨋든 이제라도 알게되서 다행이고 앞으로는 백준 문제들도 꾸준히 풀어보려고 한다.
// 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')); // ['가', '나', '다']
(n 말고 x도 있어서 const [n, x, ...arr]로 풀면 ok )
ex) n 입력 - 공백으로 구분된 n개의 값 입력 - m 입력 - 여러 줄에 걸쳐 m개의 값 입력
참고 포스팅 : https://tesseractjh.tistory.com/39