본문 바로가기
Programming/기타

백준에서 Javascript 이용하기

by Bam_t 2021. 11. 17.
728x90

프로그래밍 입문을 자바로 했기 때문에 웹 개발, 특히 프론트엔드를 준비하면서도 그동안 자바로 코딩테스트 문제를 풀곤 했었습니다. 그러다 문득 든 생각이 JS가 메인인 프론트엔드, 백엔드에서도 Node.js가 자리를 잡아가면 js를 잘 아는 것이 중요한데 자바로 준비하는게 과연 맞는 것인가?라는 생각이 들었습니다. 그래서 자바스크립트로 다시 코딩테스트 준비를 하게 되었습니다.

하지만 백준 사이트에서 언어 선택에 자바스크립트가 없는 것을 발견했습니다. Node.js와 Typescript가 있긴 하지만 타입스크립트는 아직 손도 안대봤고, 노드는 살짝 찍먹만 해본 수준이라 구글링을 해보니 파일시스템을 통해 노드로 자바스크립트를 이용해야한다고 합니다.

 

1. fs모듈 이용

첫 번째 방식은 파일 시스템 모듈인 fs모듈을 이용하는 방법입니다.

예제는 1000번 문제인 A+B문제로 보여드리겠습니다.

문제 출처 - https://www.acmicpc.net/problem/1000

const input = require('fs').readFileSync('/dev/stdin').toString().split(' ');

const A = parseInt(input[0]);
const B = parseInt(input[1]);

console.log(A+B);

이렇게 모듈에서 파일시스템을 불러와서 내용을 읽은 뒤, 배열의 형태로 저장된 값을 따로 저장하고 선언해서 활용해야 하는 불편함이 있습니다.

 

하지만 현재 런타임 에러로 인해 상기한 fs모듈 이용방식은 권장되지 않고있습니다.

 

 

2. readline 이용하기

두번째 방식은 readline이용입니다. 이전의 파일 시스템 방식에 비하면 조금 복잡합니다.

readline 모듈을 가져오고 fs와 마찬가지로 input 배열을 만들어서 입력받은 것들을 배열에 넣어줍니다. 그리고 'close'가 있는 .on()에서 해당 함수 작성을 하면 됩니다. 

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();
});

 

모듈 생성 자체는 냅두고 다음과 같이 솔루션 코드만 따로 빼서 깔끔하게 만들 수 있습니다.

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(){ //이 안에 솔루션 코드 작성
    solution(input);
    process.exit();
});

const solution = input => {
    const A = parseInt(input[0]);
    const B = parseInt(input[1]);
    console.log(A+B);
};

실제로 컴파일 해보면, 다른 언어에 비해 채점시간이 많이 걸리는걸 볼 수 있습니다. 그래서 시간이 촉박한 알고리즘을 쓰게 되면 시간초과가 다른 언어에 비해 빈번하게 발생할 수 있습니다.

그리고 백준 사이트에서 fs 대신 readline 모듈을 권장하고 있지만, 자신에게 더 편한것을 사용하면 됩니다.


잡설로 백준 같은 큰 사이트에서 왜 아직 자바스크립트 정도나 되는 메이저 언어를 지원 안하는지는 잘 모르겠습니다. 그래서 개인적으로는 자바스크립트를 활용한다면 프로그래머스나 영어에 자신있다면 릿코드를 추천하고 싶습니다.

 

728x90

댓글