즐거운 PS 👩‍💻🥰

[백준-파이썬] 23739: 벼락치기

dalin❤️ 2021. 12. 3. 17:44

문제 풀러 가기

while을 열심히 써서 풀었다 ! while 안에 while을 써서 문제 푼 것은 오랜만인 것 같다~

1.봐야할 챕터가 없을 때까지 쭉~ 본다.

2.30분 동안 볼 수 있는 챕터를 본다!
1) 남은 시간 미만으로 그 챕터를 다 볼 수 있는 경우 => 정답을 1 더하고, 남은 시간을 업데이트한다.(남은 시간 - 그 챕터 볼 때 걸리는 시간) 챕터 수도 1 늘려주고!
2) 남은 시간으로 그 챕터 절반 이상을 볼 수 있는데, 그렇다고 시간이 남지는 않는 경우 => 정답을 1 더하고, 봐야 할 챕터 수도 1 늘린다. 그리고 이제 다시 '2.30분 동안 볼 수 있는 챕터를 본다!'를 시작해야 하니까 break.
3) 남은 시간으로 그 챕터 절반 이상 볼 수 없는 경우. => 정답은 더하면 안된다. 봐야 할 챕터 수는 1 늘린다. break!

1번도 while로 하고, 2번도 while로 해서 1번 안에 2번이 들어있다.

한번 틀렸는데, 그 이유는 아래 반례 때문이었다.

1
20

2번 1) 에서 chapter_cnt가 1 증가했는데, 그 인덱스에 해당하는 챕터가 없을 때 문제가 되었다.

그래서 아래 부분을 추가했더니 맞았다.

if chapter_cnt >= N:
    break

코드 👩‍💻

import sys
input = sys.stdin.readline

MIISS = lambda: map(int, input().strip().split())

N = int(input())
chapters = list(int(input()) for _ in range(N))

ans = 0
chapter_cnt = 0

if N == 1:
    pass

while chapter_cnt < N:
    left_minute = 30
    while left_minute > 0:
        if (left_minute > chapters[chapter_cnt]):
            ans += 1
            left_minute -= chapters[chapter_cnt]
            chapter_cnt += 1

            if chapter_cnt >= N:
                break

        elif left_minute*2 >= chapters[chapter_cnt]:
            ans += 1
            chapter_cnt += 1
            break

        elif chapters[chapter_cnt] > left_minute*2:
            chapter_cnt += 1
            break


print(ans)
728x90