Baekjoon 문제 풀기 (2869번 : 달팽이는 올라가고 싶다) Python

2869번 : 달팽이는 올라가고 싶다

1. 문제읽기


규칙 찾기

시간이 유난히 짧길래 이상하다 생각하긴 했는데..
평소대로 반복문으로 로직을 짠 뒤 예제 2번까지 돌렸는데 답이 맞길래 3번으로 넘어갔는데, 10억짜리 입력값이 있을 줄이야…
당연히 반복문으로 푸는 것은 안될 거라 생각하고 다 지우고 다시 생각해보았다.

처음에 생각한 방식은 단순하게 v-a+1을 하면 답이 나오길래 해봤는데 아니었고,
달팽이가 올라가는 방식을 작게 나누어 생각해보니
4 1 8 이라고 하면 4 -1 4 -1 4 -1 … 4 이렇게 무조건 a값에서 끝나게 되고, 이 배열을 다시 생각해보면 4 3 3 3 … 이렇게 끝나게 된다.
v 값에서 4를 먼저 빼주면 3 3 3 … 배열만 남게 되므로 결국 v에서 4를 빼준 값이 3을 몇번 더해야 나올까? 가 된다.
이걸 코드로 옮기면 된다.

2. 제출 코드


코드는 단 세줄로 끝난다.
(v-a)/(a-b)는 위에서 말한 규칙을 변수에 대입한 것인데, 마지막 a-b값을 더할 때 v 값보다 더 오버가 되는 경우도 생각해주어야 한다.
2 1 5 일때 2 1 1 1 과 같이 딱 떨어질 수도 있고, 4 1 8과 같이 4 3 3 마지막 값이 8을 넘을 때도 있기 때문에 올림을 해준다.
그리고 v값에서 a값을 빼줬기 때문에 +1을 하면 답이 나온다.

import math

a, b, v = map(int, input().split())

print(math.ceil((v-a)/(a-b))+1)

3. 공부할 것


댓글남기기