해당 문제가 어려운 이유는 우리가 흔히 아는 반복문을 통해서 풀면 "시간 초과"가 나오기 때문이다.

시간 제한을 보면 "0.15초"라고 되어있다

 

해당 문제는 수학적으로 생각이 꽤 필요하다고 생각된다.

 

결국 반복문 없이 단 번에 해결이 되도록 해야 한다는 것인데....

방법을 결국 스스로 찾지 못하고 결국 구글링의 힘을 빌려버렸다.

 

그랬더니 공통적인 방법은 %연산자를 통해서 수학적으로 문제를 접근해야 한다는 점이다.

 


우선 while문으로 해서 시간초과에 걸린 방법은 다음과 같다. 

1
2
3
4
5
6
7
8
9
10
11
a,b,v = map(int,input().split())
day = 1
height = 0
while True:
    height += a
    if height >= v:
        break
    else:
        height = height - b
        day += 1
print(day)
cs

하지만 결국에는 다음과 같이 코딩을 해야 비로소 0.15초 시간 제한 안에 들어갈 수 있다...

1
2
3
4
5
6
a,b,v=map(int,input().split())
 
if (v-b)%(a-b)==0:
    print((v-b)//(a-b))
else:
    print((v-b)//(a-b)+1)
cs

 

문제 출처: https://www.acmicpc.net/problem/2869

 

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

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

+ Recent posts