Programming/백준
[브론즈 1] 백준 1333 - 부재중 전화 (파이썬)
pental
2025. 4. 19. 14:39
https://www.acmicpc.net/problem/1333
풀이
- N개의 노래가 재생되고, 각 노래는 L초 동안 재생된다.
- 각 노래가 끝난 후에는 5초의 쉬는 시간이 있다.
- 민식이는 D초마다 전화를 걸며, 노래가 나오지 않을 때만 전화를 받는다.
- 민식이가 전화를 받을 수 있는 가장 빠른 시간을 출력해야한다.
check = [False] * 5000
- 0에서 4999초까지의 시간 동안 노래가 재생되는지 여부를 저장한다.
- True 라면 노래가 재생중인 상태이다.
index = 0
for _ in range(N) :
for _ in range(L) :
check[index] = True
index += 1
for _ in range(5) :
index += 1
- 각 노래의 재생 시간 동안 check를 True로 표시한다.
- 이후 5초 쉬는 시간 동안은 아무것도 하지 않는다.
- 이 과정을 N번 반복한다.
for i in range(0, 5000, D) :
if not check[i] :
print(i)
break
- 0, D, 2D, 3D, … 순으로 시간을 확인한다.
- check[i] == False인 가장 빠른 시간을 찾아서 출력한다.
- 즉 이시간은 민식이가 전화를 받을 수 있는 최초 시간이다.
코드
# 백준 1333 - 부재중 전화
# 분류 : 구현
N, L, D = map(int, input().split())
check = [False] * 5000
index = 0
for _ in range(N) :
for _ in range(L) :
check[index] = True
index += 1
for _ in range(5) :
index += 1
for i in range(0, 5000, D) :
if not check[i] :
print(i)
break