코딩을 하다 보면 문제를 해결하고 깨닫는 순간의 쾌감이 있어 재미있다. 그런데 헷갈렸던 부분을 한번 해보고 넘어가다 보니 그런 문제에 다시 마주하게 되어서 블로그에 조금씩 정리해보려고 한다.
백준 알고리즘을 node.js로 풀려고 하니 테스트 케이스를 입력받는 코드를 직접 작성해야 했다.
알고리즘을 풀어보기 전까진 직접 입력받아 볼 일이 없어서 다소 생소했다. 검색해보니 흔히 두 가지 방법으로 입력받는다.
1. readline
2. fs 모듈
백준 알고리즘을 풀기 위해 VS Code를 이용해서 테스트하는데 fs 모듈은 경로 문제(no such file or directory, open '/dev/stdin)가 발생해서 readline을 사용하는 방식으로 풀어보고 있고 정리해보려 한다.
기본적으로 line을 통해 사용자가 입력한 값이 들어온다.
rl.close()가 실행되면 process.exit()가 호출되어 프로세스가 종료된다. 값을 입력하고 엔터를 누르면 종료되는데 rl.close();를 지우면 엔터를 눌러도 계속해서 여러 줄을 입력받을 수 있다. 이 때는 ctrl + C 혹은 ctrl + D 를 입력하여 종료할 수 있다.
한 줄 입력받기
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function(line){
console.log(line);
rl.close(); // 한 줄 입력받고 종료
}).on('close', function(){
process.exit();
})
> Hello World < Hello World |
여러 줄 입력받기
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = []; // input 배열 선언
rl.on('line', function(line){
input.push(line); // 입력받는 각 줄의 값을 input 배열에 저장
}).on('close', function(){
console.log(input);
process.exit();
})
> Hello > World < [ 'Hello', 'World' ] |
한 줄에 여러 값 입력받기
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function(line){
input.push(line.split(' ').map((el) => parseInt(el))); // 문자열을 끊어 정수로 변환후 배열로 반환
}).on('close', function(){
console.log(input);
process.exit();
})
> 1 2 3 > 4 5 6 > 7 8 9 < [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] |
백준 문제를 풀기 위해 기본적으로 꼭 알고 있어야 했다.
입력받은 값을 split 함수를 통해 공백을 기준으로 끊어서 배열로 반환한다. 그 배열 안의 값은 문자열이기 때문에 필요하다면 map 함수를 이용하여 정수로 바꿔줄 수 있다.
.map(el => +el)도 가능하다.
'프로그래밍 > 백준 알고리즘' 카테고리의 다른 글
[백준 / node.js] 1000번: A+B (0) | 2021.07.20 |
---|---|
[백준 / node.js] 10172번: 개 (0) | 2021.07.20 |
[백준 / node.js] 10171번: 고양이 (0) | 2021.07.20 |
[백준 / node.js] 10718번: We love kriii (0) | 2021.07.19 |
[백준 / node.js] 2557번: Hello World (0) | 2021.07.19 |
댓글