https://www.acmicpc.net/problem/13458
먼저 <시험장 인원수 - 총감독관이 맡을 수 있는 인원수>를 해주고,
남은 시험장 인원수가 부감독관이 맡을 수 있는 인원보다 많으면
while 루프문을 돌려 <시험장 인원수 - 부감독관이 맡을 수 있는 인원수>를 해주었다.
근데 이렇게 풀면 틀린다...
문제에 이 예제가 있을 때부터 쎄하긴 했는데 역시나 바로 시간초과에 당첨되었다.
이유는, 시험장 인원수가 너무 많을 경우 빼주는 while문이 많이 돌아가서 많은 시간이 소요되기 때문이다
즉, 한 번씩 빼주는게 아니라 부감독관이 맡을 수 있는 인원수를 수학적으로 계산해서 처리해야 한다.
이때 필요한게 나눗셈이다.
기존 코드는 아래와 같다.
총감독관이 맡을 수 있는 인원수를 먼저 빼주고 부감독관이 맡을 수 있는 인원수를 while문으로 계속 돌려가며 빼줬는데 이렇게 하면 안 되고,
이렇게 바꿔주어야 한다. 근데 이때 단순히 나누기만 하면 소수점이 떨어져 정확한 부감독관 인원 수를 구할 수 없기 때문에 (c-1)을 더해서 올림효과를 줘야 한다.
예를 들어 7을 3로 나누면 2.3333...이 되기 때문에 이를 3으로 얻기 위해 7 + 3 - 1 = 9 / 3 = 3으로 계산하는 것이다.
정답 코드
import sys
input = sys.stdin.readline
n = int(input())
people = list(map(int, input().split()))
b, c = list(map(int, input().split()))
count = 0
for i in range(n):
people[i] -= b
count += 1
if people[i] > 0:
count += (people[i] + c - 1) // c
print(count)
'PS > 백준' 카테고리의 다른 글
[백준] 14888번 연산자 끼워넣기 (python) (0) | 2024.07.07 |
---|---|
[백준] 14501번 퇴사 (python) (0) | 2024.07.07 |
[백준] 1021번 회전하는 큐 (python) (1) | 2024.07.02 |
[백준] 10866번 덱 (python) (0) | 2024.07.02 |
[백준] 2164번 카드2 (python) (0) | 2024.07.02 |