: node.js를 이용한 백준 단계별로 풀어보기
클릭해서 문제 전체 보기🔼
📖 풀이 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
let inputArr;
for (let i = 0; i < input.length; i++) {
inputArr = input[i].split(" ").map((item) => +item);
}
function solution(inputArr) {
if (inputArr[0] > inputArr[1]) return ">";
if (inputArr[0] < inputArr[1]) return "<";
return "==";
}
console.log(solution(inputArr));
💚 추가 학습~
클린 코드
를 작성하기 위한 방법 중 하나로 if문 사용 시 else의 지양
이 있다.
이는 else 대신 if문에서 바로 return or 실행
시키면 해결할 수 있고, Early Return이라고 한다.
else 지양의 이유로는 가독성 올라감, 한 함수가 여러 기능을 할 때 else를 사용하면 하나에만 적용될 위험 있음가 있다.
빨리 거를 수 있는 조건으로 Early Return 시키면, 굳이 뒤의 조건들까지 보지 않아도 되므로 코드가 명확해진다.
function B손님이_가게에_들어옴() {
if(A손님이_물건_위치_물어봄) {
물건을_찾아드린다;
} else {
어서오세요_올리브영입니다_로_인사한다;
}
};
function B손님이_가게에_들어옴() {
if (A손님이_물건_위치_물어봄) {
물건을_찾아드린다;
}
return 어서오세요_올리브영입니다_로_인사한다;
};
특히 else if문
은 else { if(true) { aa; } }와 같기 때문에, else 처리 후 그 안에서 if문이 또 시작되는 것이다.
조건을 많이 추가해야한다면 if문 대신 switch문을 사용
하는 것도 한 방법이다.
하지만 상황에 따라 else를 사용하는 경우가 더 좋을 때도 있으므로, 상황에 맞게 사용하는 것이 중요하다.
클릭해서 문제 전체 보기🔼
📖 풀이 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
function solution(input) {
if (90 <= input) return "A";
if (80 <= input) return "B";
if (70 <= input) return "C";
if (60 <= input) return "D";
return "F";
}
console.log(solution(+input));
📢 풀이 설명
else 사용 대신 Early Return방식
을 사용하였다.
클릭해서 문제 전체 보기🔼
📖 풀이 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
function solution(input) {
if (input % 100 == 0) {
if (Math.floor(input / 100) % 4 == 0) return 1;
return 0;
}
if (input % 4 == 0) return 1;
return 0;
}
console.log(solution(input));
클릭해서 문제 전체 보기🔼
📌 주의: 입력받을 때 fs 모듈
사용하면 런타임 에러 (EACCES)
발생
📖 풀이 코드
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on("line", function (line) {
input.push(line);
}).on("close", function () {
input = input.map((item) => +item);
solution(input);
process.exit();
}); // readline 모듈 사용
function solution(input) {
if (+input[0] > 0) {
if (+input[1] > 0) return console.log("1");
return console.log("4");
}
if (+input[1] > 0) return console.log("2");
return console.log("3");
}
📢 풀이 설명
위 코드의 readline 모듈은 입력 예제 입력이 여러 줄인 경우
에 사용한다. 문제의 예제 입력 형태에 맞게 아래 작성한 코드의 부분을 바꿔주면 된다.
...(10번째줄)
input = input.map((item) => +item);
solution(input);
...
예제 입력이 한 줄인 경우, 아래와 같은 코드를 사용한다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function(line) {
console.log(line); // 이 부분을 문제에 맞게 수정
rl.close();
}).on("close", function() {
process.exit();
});
💚 추가 학습~
자바스크립트 문제의 예제를 입력받는 방법에는 fs(file system)모듈
과 readline 모듈
이 있는데, 이 둘은 콘솔의 입출력을 관리한다. node.js로 백준 문제를 풀 때 어떤 것을 사용하든 상관없다.
클릭해서 문제 전체 보기🔼
📖 풀이 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n").join().split(" ");
let H = +input[0];
let M = +input[1] - 45;
if (M >= 0) return console.log(H, M);
if (H - 1 >= 0) return console.log(H - 1, M + 60);
return console.log(23, M + 60);
클릭해서 문제 전체 보기🔼
📖 풀이 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const [ab, C] = fs.readFileSync(filePath).toString().trim().split("\n");
let AB = ab.split(" ").map((item) => +item);
let M = AB[1] + +C;
let plusH = parseInt(M / 60);
let finalM = M % 60;
let finalH = AB[0] + plusH;
if (finalH >= 24) {
finalH -= 24;
}
console.log(finalH, finalM);
클릭해서 문제 전체 보기🔼
📖 풀이 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split(" ").map((item) => +item);
if (input[0] == input[1]) {
if (input[1] == input[2]) return console.log(10000 + input[0] * 1000);
return console.log(1000 + input[0] * 100);
}
if (input[0] != input[1]) {
if (input[0] == input[2] || input[1] == input[2]) return console.log(1000 + input[2] * 100);
return console.log(Math.max(...input) * 100);
}
💚 추가 학습~
여러 원소 중 최댓값 혹은 최솟값을 구할 때 사용할 수 있는 함수는 다음과 같다.
배열 속 원소들을 풀어헤치는 방법은 다음과 같다.
참고한 자료(클릭하면 이동): else 사용 지양 이유, readline 모듈, 최댓값 혹은 최솟값 함수
7문제나.. 열정적이시네요!