Programmers의 문제들을 접해보고, 갑자기 다른 사이트들의 문제 구성이 궁금했다.
그래서 Baekjoon 사이트를 들어가 기초 문제를 몇 개 풀어보기로 했다.
문제를 풀기 위해 언어 선택을 하려는데 아무리 찾아봐도 JavaScript가 보이지 않았다.
JavaScript를 사용하여 문제를 해결하기 위해선 node.js를 사용하여 작성해야 했다.
당황스러웠다. 왜일까?
당연히 JavaScript도 프로그래밍 언어니까 가능할 줄 알았다.
왜 문제를 해결할 때 JavaScript가 아닌 node.js를 사용해야 하는지 곰곰히 생각해보았다.
문제를 해결하는 과정은 함수에 임의의 값을 입력 받아 결과값을 출력하는 것이다.
여기서 중요한 포인트는 임의의 값을 어떻게 받느냐
였다.
C는 scanf, Java는 Scanner, Python은 input을 사용하여 자체적으로 값을 입력받을 수 있었다.
하지만, JavaScript는 달랐다.
JavaScript는 브라우저에서 input 태그를 사용하거나, prompt() 메서드를 사용하여 값을 입력받았다.
따라서, 자체적으로 값을 입력 받기 위해서는 node.js의 readline 모듈을 이용해야 했다.
// readline 모듈 불러오기
const readline = require('readline');
// readline 모듈을 사용하여 입출력 인터페이스 객체 생성
const rl = readline.createInterface({
input: process.stdin, // 입력 (stdin = standard input)
output: process.stdout, // 출력 (stdout = standard output)
});
// input 값을 저장하는 변수
let input = [];
// on 메서드 : 이벤트가 발생했을 때 실행할 동작을 설정함
// line 이벤트 : 입력 받은 값을 한 줄씩 읽어 문자열로 전달하는 이벤트.
rl.on('line', (line) => {
// 입력 받은 값을 처리하는 코드
// (Ex. 공백을 사용하여 여러 개의 값을 입력 받는 코드 (a b c))
input = line.split(' ');
// rl.close();
});
// close 이벤트 : 콘솔에서 Ctrl+C를 입력하거나 입력 인터페이스에서 rl.close()를 사용한 경우에 발생하는 이벤트
// close 이벤트를 실행하지 않으면 입력 이벤트가 무한히 실행됨
rl.on('close', () => {
// 입력이 완료된 후에 실행하는 코드
// (Ex. 입력된 값을 출력하는 코드)
input.forEach((element) => {
console.log(element);
})
// 입출력 인터페이스 종료
process.exit();
});