문제 : https://www.acmicpc.net/problem/13458

 

서론

문제가 너무나 쉬웠다. 반면 정답비율은 낮아서 계속 의심을 하면서 풀었는데 역시나 채점 결과가 틀렸다.

틀린 이유는 출력결과가 int의 범위를 초과해서인데, 매우 의심한거 치고는 상당히 수월하게 끝냈다.

 


풀이

예제 1번의 결과로 총감독과 부감독 중 하나는 없을 수도 있는것을 알 수 있다.

예제 4번의 결과로 총감독은 반드시 방마다 한명이 있어야 함을 알 수 있다.

그럼 각 방마다 먼저 인원수에서 b를 감소시킨 후 출력값을 +1하고, 아직 방안에 인원이 남아있으면 남아있을때까지 c를 감소시키며 출력값을 늘려가면 된다.

c를 감소시킬때는 아래와 같이 나누기와 나머지를 이용하면 반복문을 사용하지 않아도 된다.

if (room[i] % c == 0) result += room[i] / c;
else result = result + room[i] / c + 1;

 


구현

// c++

#include <iostream>

using namespace std;

int room[1000000];
int n;
int b, c;

void init() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> room[i];
	}
	cin >> b >> c;
}
int main() {
	init();
	long long result = 0;

	for (int i = 0; i < n; i++) {
		room[i] -= b;
		result++;
		if (room[i] > 0) {
			if (room[i] % c == 0) result += room[i] / c;
			else result = result + room[i] / c + 1;
		}
	}

	cout << result;

}