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