알고리즘/백준-Python

[Python] 백준 1173번 : 운동

sweesweet 2021. 11. 23. 16:01

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

N,m,M,T,R=map(int,input().split())
x=m
nn=0
count=0
while True:
    if x+T<=M:
        x=x+T
        nn+=1
        count+=1
    elif x+T>M:
        x=x-R
        count+=1
        if count==1:#유의해야함~!!
            print(-1)
            break
        if x<m:
            x=m

    if N==nn:
        print(count)
        break

여기서 유의해야할 점은 바로 처음부터 'm+T가 M보다 커졌을 때'다.

코드는 잘 짰는데 예제값을 입력했더니 무한 루프가 돌아간다? 위의 점을 빼먹었을 확률이 높다.

나 또한 그래서 구글에 쳐보니 m+T가 M보다 커졌을 때는 애초에 운동을 할 수 없기 때문에 여기서 브레이크를 걸어줘야 한다고 했다. 내코드를 고치기엔 풀어가는 방향이 달라서 x+T>M 이고 count가 1이 될 때(정상적으로 돌아간다면 무조건 처음 if절인 x+T<=M을 먼저 하기 때문에 elif절에서 count가 1이 될 수 없다.) break를 걸었다.

 

%오늘도 생각한다 코딩은 참... 이곳저곳 방향을 달리봐야 하는구나.. 예제가 주어진다고 해도 경우를 잘 생각해서 조건을 넣어야 한다는 점을 또 깨닫는다.