시험 감독

문제

언어

  • JavaScript

순서도

  1. 주어진 시험장의 인원에 따라서 총감독관과 부감독관의 수 세기

문제 풀이 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));