푸르미르

[python]2869.달팽이는 올라가고 싶다. 본문

Baekjoon Online Judge

[python]2869.달팽이는 올라가고 싶다.

((•_•)) 2021. 1. 10. 16:06

  그냥 달팽이가 잠을 안자고 꼭대기까지 쭉 올라갔으면 좋겠다는 생각이 드는 문제이다.

입력값으로 띄어쓰기를 기준으로 a,b,v가 주어진다. 차례대로 낮에 달팽이가 올라갈수있는 거리(미터), 달팽이가 잘때 미끄러져 내려가는 거리, 꼭대기의 높이이다.

 

처음 while문을 사용하여 코딩을 했었는데 시간초과가 떴다. 구글링을 해보니 반복문을 사용하지 않아도 구할 수 있다는 것을 알게 되어 다시 코드를 짰다. 생각보다 간단했다.

 

달팽이는 꼭대기까지 올라가는데 어차피 마지막엔 a거리 만큼 움직여야 한다. 이게 무슨 뜻이냐면, 예를 들어, 입력값이

2 1 5 이렇게 주어졌다면, 달팽이는 (2-1)+(2-1)+(2-1)+2 >= v 이것이 참이때문에 꼭대기 까지 가는데 4일이 걸린다는 것을 알 수 있다. 이때 맨마지막에 a값인 2를 마지막으로 조건을 만족한것을 알 수 있다.

또 다른 예시를 들자면 5 1 6이다.  (5-1)+5 >= v 가 참이기 때문에 총 2일이 걸린것을 알 수 있다. 이 맨 마지막에 a만 더해지는 것을 제외시키면, 하루, 즉 낮에 달팽이가 간거리와 잘 때 미끄러진 거리 이렇게 짝으로 몇번이 반복되었는지 알 수 있다. 

(v-a)/(a-b)를 했을 때의 경우의 수는 둘로 나뉘는데, 나누어떨어졌을 때와 나머지가 존재할 떄이다.

나누어 떨어졌을 때에는 (a-b)+(a-b)...=v-a가 된다는 것인데 이것의 예시는 입력값이 2 1 5 일 때이다. 이때는 (v-a)/(a-b)를 했을 때 3/1==3으로 3일이 걸리고 4번째날 우리가 v-a로 정상에 도착하기 직전의 하루를 제외한것을 고려하여, 3+1일이라는 것을 알수 있다.

나머지가 존재할 경우 입력값이 5 1 6일 경우이다. 이 경우 (6-5)/(5-1)로 몫이 0이고 나머지가 존재한다. 이때 0.xxx일인데 하루에는 나머지란 존재하지 않기 때문에 이것을 하루로 친다.(+1일) 또 우리가 v-a로 정상에 도착하기 직전의 하루를 제외한것을 고려한다.(+1일) 그래서 나머지가 존재할 때에는 (v-a)/(a-b)+2를 해주어야 한다.

 

1
2
3
4
5
6
a,b,v = map(int, input().split()) #정수 입력
snail=(v-a)%(a-b) #나머지 유무 체크
if snail==0:
    print(int((v-a)/(a-b))+1)
else:
    print(int((v-a)/(a-b))+2)
cs

 

www.acmicpc.net/problem/2869

'Baekjoon Online Judge' 카테고리의 다른 글

[python]10757.큰 수 A+B  (0) 2021.01.15
[python]10250.ACM 호텔  (2) 2021.01.12
[python]1193.분수찾기  (0) 2021.01.10
[python]10870.피보나치 수  (2) 2021.01.07
[python]10872.팩토리얼  (0) 2021.01.07