본문 바로가기
Problem Solving/BOJ

[BOJ][Python]22864 풀이

by NoiB 2022. 12. 31.
반응형

https://www.acmicpc.net/problem/22864

 

22864번: 피로도

첫 번째 줄에 네 정수 $A$, $B$, $C$, $M$이 공백으로 구분되어 주어진다. 맨 처음 피로도는 0이다.

www.acmicpc.net

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