웹 개발자, 프론트엔드를 지망하면서 가장 많이 접하는 언어는 당연히 Javascript
일 것이라고 생각합니다. 그리고 알고리즘 실력이나 코딩 테스트 준비를 위해서 사람들이 가장 많이 찾는 국내 알고리즘 문제 사이트는 백준이라고 할 수 있습니다.
개인적으로 드는 생각이 웹 개발자(일단은 프론트엔드)로 살아가려면 자바스크립트나 그 파생 기술(슈퍼셋, 라이브러리 등)을 잘 다루는 것이 핵심인데, 코딩테스트를 다른 언어로 보는게 맞나?라는 생각이 개인적으로 들었습니다. 그래서 자바스크립트를 가지고 코딩테스트를 준비하자라고 생각하게 되었습니다.
물론 점유율을 조사해보면 자바 스프링이 가장 높은 점유율을 차지하고 있습니다. 하지만 제가 지망하는 것은 프론트엔드이고, 프론트엔드는 자바스크립트, 리액트 등의 사용율이 높아 자바스크립트를 잘 쓰는것이 좋겠다고 판단했습니다.
당연히 처음엔 백준에 가입을 하고 문제를 풀려고 했었습니다. 하지만 수많은 언어 목록 중에서 자바스크립트가 없다는 것을 알게 되었습니다. node.js
나 typescript
는 존재하지만 두 언어는 코딩테스트를 풀 만큼 익숙하지 않았기에 처음 본 당시에는 당황을 많이 했습니다. (지금은 할 수 있을지도...?)
아무튼 이러한 곤경에 빠져서 구글링을 해본 결과 node.js
를 이용해서 자바스크립트를 이용하는 것이 편하다고 판단했고 그 방법을 몇 가지 소개해드리려고 합니다.
비권장인데 왜 소개하냐!!!하실수도 있는데 그냥 제일 간단해서 소개해드립니다. 언젠간 고쳐질수도 있고요...?
아무튼 파일 시스템 모듈을 이용하는 방법입니다. 1000번 문제로 예시를 들어보겠습니다.
const input = require('fs').readFileSync('/dev/stdin').toString().split(' ');
const A = parseInt(input[0]);
const B = parseInt(input[1]);
console.log(A+B);
첫 줄에서 변수 input에 파일 시스템을 이용해서 값을 받아들이도록 합니다. 이때 input에 저장되는 값은 배열
의 형태로 저장되므로 그 아랫줄에서 A와 B에 값을 할당할 때 배열의 값을 참조해서 저장하도록 했습니다.
파일 시스템 모듈에 대한 것이 궁금하신 분들은 이 포스트를 참고하셔도 좋을 것 같습니다.
제목에도 써놨듯이 이 방식은 현재 비권장인데요.
런타임 에러로 인해서 fs 모듈
방식 대신 readline
을 이용하는 것을 권장하고 있다고합니다.
그러면 현재 권장되고 있는 readline
방식에 대해서 알아보도록 하겠습니다. fs 모듈
방식보단 조금 복잡해 보일수도 있습니다. 문제 예시도 방금 전에본 1000번 문제를 그대로 사용하도록 하겠습니다.
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
readline.on('line', function(line) {
input = line.split(' ').map(el => parseInt(el));
}).on('close', function(){ //이 안에 솔루션 코드 작성
const A = parseInt(input[0]);
const B = parseInt(input[1]);
console.log(A+B);
process.exit();
});
뭔가 복잡하다고 느껴지신다면 당장은 제시된 양식과 같다고 생각하시면 됩니다. fs 모듈처럼 readline 모듈
을 불러옵니다. 그리고 input
에 문제에서 주어진 값들을 받아 넣는 과정들이 있습니다. 중요한건 .on()
의 'close'
뒤에 나오는 콜백함수에 솔루션 코드를 넣고 process.exit()
로 종료해준다는 것 입니다.
저는 아래와 같이 만들어 놓은것을 복사붙여넣기로 작성하고 있습니다.
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
readline.on('line', function(line) {
input = line.split(' ').map(el => parseInt(el));
}).on('close', function(){
/*
솔루션 작성
*/
process.exit();
});
readline을 권장하고 있으나, fs 모듈을 이용해도 런타임 에러가 나지 않는 경우도 있으니 결국 두 방법 중 더 편한 방식을 사용하시면 됩니다.
백준에서 자바스크립트를 사용하기 위한 방법인 node.js
이용하는 방법을 알아봤습니다. 여러문제를 풀다보면 아시겠지만, 노드를 사용하면 채점이 오래걸리고 메모리도 많이 잡아먹어서 분명 정답인데 틀렸다고 나오는 문제도 있는 경우가 있습니다. (이런 경우 리포트를 통해서 정기적으로 수정은 되고 있긴합니다.)