스터디에서 백준 문제를 도전하게 되어 위 영상을 참고해 node.js 입력 방법을 정리해 보았다
예시로 백준 4344번 문제를 풀어보겠다🔽
1단계
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
- js 파일과 동일 경로에 문제 입력을 담은 txt 파일 생성
2단계 (거의 고정)
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
console.log(input);
- fs(File System) 모듈을 사용해 readFileSync 메소드로 입력 값 읽기
- 백준 사이트와 같은 linux 환경 경로와 VS Code 환경 경로 따로 관리
- split 메소드로 한 줄씩 자를 때 \r이 붙을 수 있는데 무시해도 됨
3단계
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
const inputCount = Number(input[0]);
const testCases = [];
for (let i = 1; i <= inputCount; i++) {
const temp = input[i].split(" ").map(Number);
const testCase = {
N: temp[0],
scores: temp.slice(1),
};
testCases.push(testCase);
}
console.log(testCases);
- 문자열로 변환된 입력 값을 요구 사항에 맞게 테스트케이스로 가공
- 파라미터로 활용하기 위해 배열 안의 객체 형태로 정리해주면 좋음
4단계
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
const inputCount = Number(input[0]);
const testCases = [];
for (let i = 1; i <= inputCount; i++) {
const temp = input[i].split(" ").map(Number);
const testCase = {
N: temp[0],
scores: temp.slice(1),
};
testCases.push(testCase);
}
const solution = ({ N, scores }) => {
/**
* 문제 풀이
*/
console.log("답");
};
testCases.forEach((testCase) => solution(testCase));
- 모든 테스트케이스를 순회해 solution 함수에서 답을 콘솔로 출력하도록 가공
프로그래머스/리트코드는 여기서부터 시작
const solution = ({ N, scores }) => {
const average = scores.reduce((acc, cur) => acc + cur, 0) / N;
const count = scores.reduce(
(count, score) => (score > average ? count + 1 : count),
0
);
console.log(`${((count / N) * 100).toFixed(3)}%`);
};
WOW ~ 이제 풀어주면 된다 🤓
백준에서 node.js로 문제를 풀면 종종 맞아도 통과하지 못하는 경우와 마주칠 수 있다 (맞왜틀?)
이는 시간 제한과 메모리 제한 때문이니, node.js로 풀 수 있는 문제인지 미리 체크하도록 하자 !
Reference🔽
'Languages > JavaScript' 카테고리의 다른 글
[TIL] MVC 패턴을 알아보자 (0) | 2022.12.15 |
---|---|
[HUFS/GnuVil] #26 에러 처리, 모듈 (0) | 2022.11.29 |
[HUFS/GnuVil] #25 제너레이터와 async/await (0) | 2022.11.29 |
[HUFS/GnuVil] #24 프로미스 (0) | 2022.11.29 |
[우아한테크코스/프리코스] #4 다리 건너기 (0) | 2022.11.23 |