반응형
https://www.acmicpc.net/problem/22864
a, b, c, m = map(int, input().split())
work = 0
tired = 0
for _ in range(24):
if tired + a > m:
tired = 0 if tired < c else tired - c
else:
tired += a
work += b
print(work)
최근에 파이썬이 새로운 버전이 나오면서 속도가 엄청 빨라졌다고 들었는데 그 이유 때문인지 백준에서 파이썬 채점을 할 때 시간이 상당히 빠릅니다. 예전에는 아무리 짧은 코드여도 50 ~ 70ms 정도 나왔던 것 같은데 이 코드가 36ms가 나오더라구요.
이 문제는 언뜻 비효율적인 것처럼 보이지만 특정 조건때문에 수식으로는 풀기가 조금 까다로울 것 같습니다. 해당 조건은 바로 피로도가 최소 0 이라는 조건인데요. 단순하게 식으로 적게 되면 답은 $ B * (M + 24*C) / (A + C) $ 가 되겠지만 이러면 피로도가 C만큼 깎일 때 음수가 되어도 그냥 계산을 하기 때문에 몇몇 테스트 케이스에서 정답보다 큰 값이 나오게 됩니다. 그래서 조금 비효율적으로 보일지라도 반복문을 통해서 답을 도출하는게 정답이 나오게 되죠.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ][Python]2810 풀이 (0) | 2023.01.23 |
---|---|
[BOJ][Python]18238 풀이 (0) | 2023.01.17 |
[BOJ][Python]14487 풀이 (0) | 2022.12.30 |
[BOJ][Python]2864 풀이 (0) | 2022.12.29 |