https://www.acmicpc.net/problem/23739
문제
입력
출력
문제 코드
N = int(input())
time = 30
chap = 0
while (N > 0) :
time = 30
while (time > 0) and (N > 0):
T = int(input())
if (time / T) >= (1 / 2) or (time >= T):
chap += 1
time -= T
N -= 1
else :
time -= T
N -= 1
print(chap)
문제 풀이
절반 이상 공부한 챕터의 개수를 chap 이란 변수에 저장하기로 우선 정했다.
time이란 변수에 남은 공부 가능한 시간을 저장하기로 생각하고 30(분)으로 초기화를 했다.
그 후, 챕터당 공부에 걸리는 시간(T)을 입력받아, 만약
남은 공부 가능한 시간 / 챕터당 공부에 걸리는 시간이 1 / 2 이상일 경우, (time / T >= 1 / 2)
남은 공부 가능한 시간이 챕터당 공부에 걸리는 시간 이상일 경우, (time >= T)
해당 챕터를 절반 이상 공부가 가능하므로,
chap을 +1, 남은 공부 가능한 시간에 챕터당 공부에 걸리는 시간을 뺀다.(time -= T)
그 외의 경우는 절반 이상 공부 못하는 경우이므로 chap에 값을 더 하지 않는다.
이렇게 한번 입력 받을 때마다 N(챕터 개수를 저장해 둠)을 -1 해가며 반복해 간다.
이때, time -= T를 하여 남은 공부 가능한 시간이 0 이하가 된 경우 다시 30으로 바꾼다.
주의 사항
코드 7번째 줄의 while문에서 N > 0 이란 조건이 처음엔 필요 없을 거라 생각했지만
예를 들어, 챕터 3개가 있고 각 챕터당 1분, 2분, 3분이라면
time이 30 -> 29 -> 27 -> 24가 되고 3챕터가 입력이 끝났으므로 종료되어야 하지만
time은 0보다 크기에 다시 반복하여 입력이 없지만 입력을 받으려 한다.
이럴 경우, 백준에서 런타임 에러 (EOFError)가 발생하여,
모든 입력이 끝났음을 확인하기 위해 N > 0이란 조건을 추가했다.
'Koala - 14기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/JAVA] 11365번 !밀비 급일 (0) | 2024.03.17 |
---|---|
[백준/python] 4435번 중간계전쟁 (0) | 2024.03.17 |
[백준/Python] 11021번: A+B -7 (0) | 2024.03.16 |
[백준/python]10950번 A+B-3 (0) | 2024.03.14 |
14기 기초 알고리즘 준비 스터디 (0) | 2024.03.10 |