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
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[SWEA - 파이썬] 2382.미생물 격리 (0) | 2021.12.06 |
---|---|
[백준-파이썬] 9844: Gecko (0) | 2021.12.05 |
[백준-파이썬] 23740: 버스 노선 개편하기 (0) | 2021.12.01 |
[백준-파이썬] 2343: 기타 레슨 (0) | 2021.11.20 |
[백준-파이썬] 15686: 치킨 배달 (0) | 2021.11.17 |