자바스크립트(node.js)로 백준 알고리즘 문제 풀기

백준 알고리즘 사이트에서 자바스크립트로 문제를 풀어보고 싶어서 node.js로 푸는 방법을 찾아서 정리해 보았다.
백준에서 자바스크립트로 문제를 풀기 어려웠던 이유는 입력 값을 직접 받아야 했기때문이다.
이번엔 맘 먹고 해보자!는 생각으로 해봤다.
프로그래머스에선 console.log로 디버깅 비슷하게 값을 확인하며 풀 수 있어서 IDE가 필요 없었는데
백준에선 그렇지 못해서 VScode에서 코드를 짜고 복사/붙여넣기하며 풀어야 했다.
VSCode에서 백준 알고리즘 풀기
1. node.js 설치하기
Node.js
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
우선 node가 설치되어 있어야 한다. 그런 다음 vscode를 실행한다.
백준 문제 중 1000번: A+B 문제를 예시로 들어보았다.
https://www.acmicpc.net/problem/1000
1000번: A+B
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
2. 폴더 구성
VScode를 열고 baekjoon 폴더 안에 입력값을 넣을 input.txt 파일과 알고리즘을 구현할 js 파일 하나를 생성한다.
input.txt 파일에 해당 문제의 예제를 복사해서 입력한다.
3. index.txt 파일 읽기
const fs = require('fs')
const input = fs.readFileSync('./input.txt').toString().trim()
nodejs의 require() 메서드를 이용해 'fs'모듈을 불러왔다. require()는 외부 모듈을 가져오는 함수이다.
'fs' 는 파일의 입출력을 처리할 때 사용하는 모듈이다.
fs에 내장된 readFileSync를 이용해 파일의 데이터를 불러왔다.
javascript의 toString() 함수를 이용해 파일의 데이터를 문자열로 반환하였고, trim() 함수로 혹시 모를 공백을 제거한 뒤, split() 함수를 이용해 ' '(공백)을 구분자로 하여 문자열을 배열로 변환하였다.
(js의 자세한 함수 설명은 생략하였다.)
이제 input에 저장된 값을 출력하기 위해 터미널을 열어 'node 파일명'을 입력하여 자바스크립트 파일을 실행했다.
값을 읽어오는 데는 성공하였으나 배열의 값이 문자열이 아닌 숫자로 받고 싶었다.
이를 위해서, map() 함수를 사용하여 배열의 요소들을 Number 타입으로 변환하여 리턴하였다.
4. solution 함수로 알고리즘 문제 풀기
프로그래머스와 유사하게 solution 함수를 만들어서 문제를 풀어보았다.
const fs = require('fs')
const input = fs.readFileSync('./input.txt').toString().trim().split(' ').map(data => Number(data))
function solution(a, b) {
return a+b
}
const answer = solution(input[0], input[1])
console.log(answer)
백준 사이트에 코드 제출하기
VSCode에서 완성된 코드는 복사하여 제출하면 된다.
주의할 점으로는 readFileSync()에서 경로를 index.txt가 아닌 /dev/stdin으로 변경해야 한다.
경로가 틀리면 런타임 에러로 실패가 뜰 것이다.
성공!
* 제출 코드
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ').map(data => Number(data))
function solution(a, b) {
return a+b
}
const answer = solution(input[0], input[1])
console.log(answer)
복잡한 예제가 나와도 문자열을 읽어오는 부분은 위와 같기 때문에 이후 javascript 함수를 활용해 적절한 배열로 반환하면 된다.
이제 백준에서 자바스크립트 알고리즘 문제를 푸는 법을 알았으니 열심히 문제를 풀어봐야겠다.

*참고 영상