Python3
문제
바이러스 검사
키워드
문제 풀이
문제 요구사항
- 총 n개의 식당에서 체온을 측정하는 검사자는 검사팀장과 검사팀원으로 나뉘어진다.
- 한 가게당 팀장은 오직 한 명, 팀원은 여러 명이 있을 수 있다. (하지만 가게당 팀장 한 명은 무조건 필요.)
- 팀장이든 팀원이든 담당한 가게에 대해서만 검사한다.
- n개의 식당 고객들의 체온을 측정하기 위해 필요한 검사자 수의 최솟값을 구하는 프로그램
변수 및 함수 설명
- n: 식당의 수
1 ≤ n ≤ 1,000,000
- cust: 각 식당에 있는 고객의 수
1 ≤ (각 식당에 있는 고객의 수) ≤ 1,000,000
- ldr: 검사팀장이 검사할 수 있는 최대 고객 수
- mbr: 검사팀원이 검사할 수 있는 최대 고객 수
1 ≤ (팀장 혹은 팀원 한 명이 검사 가능한 최대 고객의 수) ≤ 1,000,000
- ans: n개의 식당의 고객들을 모두 검사하기 위한 검사자의 최소의 수
- tmp: 검사팀장이 검사할 수 있는 고객 수를 제외한 남은 고객
풀이
- 식당, 고객, 검사팀장과 팀원이 검사할 수 있는 고객 수를 입력받는다.
- ans 변수에 식당 개수만큼 넣는다. (식당 하나당 한 명의 검사팀장이 들어가야 하기 때문)
- 식당 개수만큼 반복한다
- 검사팀장이 검사할 수 있는 고객 수를 제외한 남은 고객을 tmp 변수에 저장한다.
- 만약 식당에 남은 인원이 더이상 없다면, 검사팀장으로 이미 검사가 끝난 것이기 때문에 더 계산할 필요가 없다. -> continue
(참고: break를 하게 되면 다른 식당까지도 종료되기 때문에 안 됨)
- 만약 팀원이 남은 인원을 모두 검사할 수 있다면, 최종 출력값에 1을 더한다.
- 그렇지 않으면, 남은 인원이 팀원이 검사할 수 있는 양으로 나눠질 때와 그렇지 않을 때로 나뉜다.
- 만약 나누어 떨어진다면, 남은 인원에서 팀원이 검사할 수 있는 인원으로 나눈 몫을 최종값에 누적한다.
- 그렇지 않으면 몫 + 1한 값을 누적한다.
최종 코드
n = int(input())
cust = list(map(int, input().split()))
ldr, mbr = map(int, input().split())
ans = n
for i in range(n):
tmp = cust[i] - ldr
if tmp <= 0:
continue
if mbr > tmp:
ans += 1
else:
if tmp % mbr == 0:
ans += tmp // mbr
else:
ans += tmp // mbr + 1
print(ans)
피드백