마지막 수정일: 24년 5월 2일
const filePath = process.platform === 'linux' ? '/dev/stdin' : '[입력파일명].txt'?
const input = require('fs').readFileSync(filePath).toString().trim().split('\n');
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().trim();
var n = input;
//n에 입력값이 담긴다. 숫자라면 Number(input)를 사용한다.
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split(' ');
//input은 배열 자료형으로 담기므로 각 글자에 접근하려면 인덱싱으로 접근
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
//input에 각 줄이 배열 자료형으로 담기므로 각 줄에 접근하려면 인덱싱으로 접근
const fs = require('fs');
const [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split(/\s/);
// split(/\s/)의 의미에 대해서는 추후 포스팅
const fs = require('fs');
const [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
입력받는 값들을 모두 String -> Number 로 바꾸고 싶다면 split()뒤에 .map(Number)를 추가한다.
백준에서 Node.js로 입력받는 방법은 두 가지가 있다.
1. readline 모듈
2. fs 모듈
1번보다는 2번이 빠르므로 2번을 사용하는 것이 좋겠다.
뭔지 모르고 사용하는 것보단 알고 사용해보자.
1번 한글자 입력받기에 대해 알아보자.
var fs = require('fs');
1줄: 이 코드는 FileSystem의 약자인 fs모듈을 불러오는 코드다.
fs 모듈은 파일 처리와 관련된 모듈이다. 이 안에 포함되어 있는 메소드가 굉장히 많다.
전부 공부하는 것보단 필요할 때 골라서 공부하는 식이 좋겠다.
var input = fs.readFileSync('/dev/stdin').toString().trim();
2줄: fs.readFileSync(filename, [options])와 같은 형태로 사용한다.
의미는 filename의 파일을 [option]의 방식으로 읽은 후 Buffer 객체를 반환한다는 뜻이다. 이 작업은 동기적으로 수행된다. (sync가 붙은 것은 동기적 읽기이다. 따라서 비동기인 readFile 메소드도 있음을 예상가능)
readFileSync의 인수로 인코딩을 지정해주지 않으면 Buffer 객체를 반환한다. 따라서 문자열로 바꿔주지 않으면 사용하기 어렵겠다.
(문자열로 바꾸지 않을 경우)
반환값을 문자열로 바꾸기 위해서는
(1번 방법으로 형변환해 타입과 함께 출력한 모습)
trim()은 문자열 양 끝의 공백+개행문자 들을 지우기 위해 사용한다.
입력의 끝에 개행문자(\n)이 입력으로 들어올 때가 종종 있으므로 사용한다.
(split메서드는 들어있는 값을 기준으로 문자열을 분할해 배열에 담는 메서드다. 입력 값의 마지막에 개행문자가 포함되어 있는 경우 split('\n')은 공백 문자 하나를 더 갖고 있는 배열을 반환한다. 이는 원하던 동작이 아니므로 이를 방지하기 위해서 trim() 을 사용한다.)
나는 보통 아래의 양식으로만 사용한다.
const filePath = process.platform === 'linux' ? '/dev/stdin' : '[입력파일명].txt'?
const input = require('fs').readFileSync(filePath).toString().trim().split('\n');
하나의 입력인 경우 input[0]
처럼 접근하면 된다.
좋은 글 감사합니다. 덕분에 자바스크립트로 백준문제 풀이를 할 수 있었습니다!