백준에서 JavaScript를 풀려면 ▶node.js 입출력 방법 포스팅에서 알아본 것처럼 fs모듈을 사용해야 합니다.
const fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split(' ');
입력값이 한 개(한 줄)일 경우는 위 코드처럼 몇 줄의 코드를 추가해야 합니다.
그러나 저처럼 VsCode에서 코딩을 하고 답을 백준에다가 올리는 방법을 사용하시는 분도 많이 계실 거라 생각합니다.
VsCode에서 node.js로 코드를 작성하려면 위와 비슷하지만 다른 코드를 추가해야 합니다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
출처 : https://www.youtube.com/@lamedev
Mac, Linux는 유닉스 기반이라서 /dev/stdin을 읽어주면 Terminal상에서 입력을 할 수 있습니다.
그러나 Window에서는 불가능하기 때문에 로컬에 있는 파일을 읽어와서 입력을 테스트해야 합니다.
윈도에서는 파일을 읽어오고 백준에 제출할 때는 /dev/stdin을 읽어와 입력을 하는 것은 번거롭기 때문에 위와 같이 삼항연산자로 platform이 linux기반이면 /dev/stdin을 읽고 윈도라면 지정한 파일을 읽어 입력을 테스트할 수 있도록 하는 코드로 위와 같은 코드를 사용하면 간편하게 테스트할 수 있습니다.
근데 처음에 저는 위와같이 "./input2.txt"를 지정해 주었을 때는 Error: ENOENT: no such file or directory, open ~라는 에러가 발생했습니다.
서칭을 좀 해보니 경로문제였습니다.
해결방법은 console.log(process.cwd())로 현재 프로그램을 실행하고 있는 경로(디렉터리를) 확인하고, 그런 다음 하위 디렉터리가 있다면 경로에 포함시켜 주면 됩니다.
- ex) A폴더 내의 B폴더에 해당 파일들이 존재하고, 현재 작업 디렉터리가 A라면
- fs.readFileSync(A+'/B/textfile.txt'); 를 해주면 됩니다.
const filePath = process.platform === 'linux' ? '/dev/stdin' : __dirname+'/input.txt';
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
하지만 보다 간편한 방법은 위와 같이 JavaScript인 전역변수인 __filename이나 __dirname을 활용하는 것입니다.
__filename && __filename
현재의 파일(file)이 위치한 폴더(directory)의 절대경로(absolute path)를 알려줍니다.
console.log(__filename)
console.log(__dirname)
즉 Error: ENOENT: no such file or directory, open ~라는 Error가 발생한다면
① 경로문제이고 현재의 파일이 위치한 경로를 확인하고 하위 경로를 추가하거나,
② __filename , __dirname을 사용하여 전체경로와 파일명을 추가해 주면 됩니다.
그러면 Mac에서는 위와같이 Terminal에서 입력이 가능합니다.
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : '/Users/zinu/Desktop/Algorithm/b2562/input.txt';
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : __dirname+'/input.txt';
파일을 이용해서 테스트하려면 위와 같이 경로를 입력해 주면 테스트가 가능합니다.
'Coding Test > 백준' 카테고리의 다른 글
[백준] 공 바꾸기 (10813번 , node.js) (1) | 2024.03.18 |
---|---|
[백준] 공 넣기 (10810번, node.js) (1) | 2024.03.17 |
[백준] 최댓값 (2562번, Node.js) (0) | 2024.03.16 |
[백준] 코딩은 체육과목 입니다. (25314번 , Node.js) (2) | 2024.03.14 |
[백준] node.js 입출력 방법 알아보기1 (fs모듈 이용) (0) | 2024.02.21 |