BOJ[13458] - 시험 감독 by JavaScript
시험 감독
문제
언어
- JavaScript
순서도
- 주어진 시험장의 인원에 따라서 총감독관과 부감독관의 수 세기
문제 풀이 step 1
- n 개의 시험장이 있고, 각 시험장에 들어가야할 감독관의 수를 세서 출력하는 문제입니다.
- 각 시험장마다 한 명의 총감독관은 필수로 필요합니다. 그래서 각 시험장마다 총감독관의 자리를 한 명씩 세어줍니다.
- 그리고 각 시험장의 응시자에서 총감독관이 감시할 수 있는 응시자의 수를 빼주고, 나머지 인원을 감시할 수 있는 최소한의 부감독관의 수를 세어주면 됩니다.
문제 풀이 step 2
- 풀이는 간단한데 예외 처리를 해줘야 할 부분이 있습니다.
- 시험장의 응시자 수 보다 총감독관이 감시할 수 있는 응시자 수가 더 많은 경우에는 부감독관을 아예 고려하지 않아도 됩니다.
- 너무 당연한 말이지만, 제가 만든 로직에서는 이 부분에 대한 처리가 들어가야 했습니다.
- 이 경우 시험장의 응시자 수에서 총감독관이 감시할 수 있는 응시자 수를 빼면 음수가 나옵니다.
- 만약 저처럼
- Math.ceil(시험장의 응시자 수 - 총감독관이 감시할 수 있는 응시자 수 / 부감독관이 감시할 수 있는 응시자 수)
- 이런 방식으로 부감독관의 수를 센다면 음수가 더해질 수도 있기 때문에 조건 처리를 해줘야 합니다.
- 추가 설명은 주석에 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const n = Number(input[0]);
const arr = input[1].split(" ").map(Number);
const [b, c] = input[2].split(" ").map(Number);
// 각 시험장마다 한명의 총감독관이 필요하므로, 총감독관의 수를 더하기
let cnt = n;
for (let i = 0; i < n; i++) {
let num = arr[i];
// 시험장의 응시자의 수에서 총감독관이 감시할 수 있는 응시자의 수 빼기
num -= b;
// 만약 시험장의 응시자의 수에서 총감독관이 감시할 수 있는 응시자의 수를 뺐는데,
// 응시자 수가 남았으면 부감독관 배치
if (num > 0) cnt += Math.ceil(num / c);
}
return cnt;
};
console.log(solution(input));