기타/알고리즘
(JS) 백준 13458번 : 시험 감독 (백준의 입력값 처리)
가나닩
2025. 1. 13. 01:13
문제를 풀기위해 아래와 같은 요소들을 고려하였다.
- 프로그래머스와 달리 백준은 입력값을 직접 처리해주어야 한다. (readline or fs)
- 총감독관 혼자 감독할 수 있는 경우와 부감독관이 필요한 경우로 나누어서 계산했다.
더보기
더보기
const readline = require("readline");
function solution(data) {
const [n, ai, count] = data.split("\n");
const st = ai.split(" ").map(Number);
const [b, c] = count.split(" ").map(Number);
let total = 0;
for (let i = 0; i < Number(n); i++) {
if (st[i] <= b) {
total++;
continue;
}
const nowSt = st[i] - b;
const subTotal = Math.ceil(nowSt / c);
total += subTotal + 1;
}
return total;
}
const input = [];
readline
.createInterface({
input: process.stdin,
output: process.stdout,
})
.on("line", (line) => {
input.push(line);
})
.on("close", () => {
const data = input.join("\n");
console.log(solution(data));
});
• 백준의 입력값 처리
프로그래머스와 다르게 백준은 입력값을 직접 처리해주어야 한다.
const readline = require("readline");
function solution(data) {
// solution 함수 내용 생략
}
const input = [];
readline
.createInterface({
input: process.stdin,
output: process.stdout,
})
.on("line", (line) => {
input.push(line);
})
.on("close", () => {
const data = input.join("\n");
console.log(solution(data));
});
5
10 9 10 9 10
7 20
입력과정을 간단히 살펴보면 아래와 같다.
- 값의 입력은 표준입력으로 받는다. 이 코드를 node로 실행해보면 터미널이 입력값을 받기위한상태가 된다.
- 입력은 한줄씩 순차적으로 한다. 위 예시의 입력값이 있다면 5 => Enter => 10 9 10 9 10 => Enter => 7 20 => Enter => Ctrl+D(EOF) 순서로 입력한다. 백준에서는 이 과정이 자동으로 진행된다.
- 입력된 값은 문자열형태로 배열에 순차적 저장된다. 이 배열값들을 그대로 활용하려면 input 배열을 사용하면 되고 문자열로 변환하여 사용하려면 join을 활용해 문자열로 변환하여 사용하면 된다.
- console.log는 표준출력과 동일한 결과이다. output부분은 생략해도 동작에는 문제가 없다.
예시에서는 readline을 활용했고 fs를 활용하는 방법도 있다. 백준에서 node.js를 사용했을때 입력값 처리 문제로 인해 발생하는 런타임에러에 관한 아래 공지게시글을 확인하는것이 좋다.
백준 - Node.js 사용 시 런타임 에러(EACCES)가 발생한다면?
• 조건문을 이용한 경우의수 나누기
반복문 내부는 매우 간단히 구현되어있다.
- 최종적으로 필요한 감독관수는 total에 저장된다. total 값의 초기값은 0이다.
- 총감독관 혼자 감독이 가능한경우 : total에 1을 더한뒤 현재 반복을 건너뛰고 다음 반복을 시작한다. (continue)
- 총감독관 혼자 감독이 불가능한 경우 : 우선 학생수에서 총감독관이 감독가능한 학생수를 뺀다. 남은 학생수를 부감독관이 감독 가능한 학생수로 나눈뒤 올림(남은 학생 감독에도 부감독관이 필요하므로)처리하여 total에 총감독관 + 부감독관의 수를 더한다.
교실수만큼 위 과정을 반복하면 최종적으로 필요한 감독관의 수를 알아낼 수 있다.