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를 걸었다.
%오늘도 생각한다 코딩은 참... 이곳저곳 방향을 달리봐야 하는구나.. 예제가 주어진다고 해도 경우를 잘 생각해서 조건을 넣어야 한다는 점을 또 깨닫는다.
'알고리즘 > 백준-Python' 카테고리의 다른 글
[Python]백준 7567번:그릇 (0) | 2021.11.25 |
---|---|
[Python]백준 3052번: 나머지 (0) | 2021.11.24 |
[Python]백준 1159번 : 농구경기 (0) | 2021.11.23 |
[Python]백준 1075번:나누기 (0) | 2021.11.22 |
[Python]백준 5622 다이얼 (0) | 2021.11.22 |