기술

달팽이는 올라가고 싶다 - 백준2869번

기술 공간 2021. 4. 5. 02:33
#백준2869번
a,b,v=map(int,input().split())
distance=0
count=0
while(1):
    count=count+1
    distance=distance+a
    if distance >= v:
        break
    else:
        distance=distance-b
print(count)


```
예제 입력 1
2 1 5
예제 출력 1
4
예제 입력 2
5 1 6
예제 출력 2
2
예제 입력 3
100 99 1000000000
예제 출력 3
999999901
->여기 3번째 test case에서 시간이 초과되었다 ㅠ 수학적인 방법을 동원해서 연산시간을 줄여야 할것 같다 (저 코드로는 big O가 큰듯)
```

#백준2869번
a,b,v=map(int,input().split())
left=v
count=1
while(left>a+(a-b)):
    count=count+1
    left=left-(a-b)
count=count+1
print(count)


```
다른 방식으로 코드를 써봐도, 3번째 test case 에서 시간 초과 ㅠ

예제 입력을 하나씩 다시 따져봤다.
이번에는 거꾸로 연산을 해봤다.

2 1 5 test case
5
-2*1 (2를 먼저 뺀다)
3
-(2-1)*3 (남은 값에서 (2-1)의 배수만큼 뺀다)
0

5 1 6 test case
6
-5*1 (5를 먼저 뺀다)
1
-(5-1)*1 (남은 값에서 (5-1)의 배수만큼 뺀다)
-3

100 99 1000000000 test case
1000000000
-100*1 (100을 먼저 뺀다)
999999900
-(100-99)*999999900 (남은 값에서 (100-99)의 배수만큼 뺀다)
0

이런 방식을 코드로 작성하면 다음과 같다.
```

#백준2869번
a,b,v=map(int,input().split())
left=v
count=0
left=left-a
count=count+1
if left%(a-b)==0:
    count=count+(left//(a-b))
else :
    count=count+((left//(a-b))+1)
print(count)

'기술' 카테고리의 다른 글

팰린드롬수 - 백준1259번  (0) 2021.04.05
직사각형에서 탈출 - 백준1085번  (0) 2021.04.05
이항계수1 - 백준11050번  (0) 2021.04.05
블랙잭 - 백준2798번  (0) 2021.04.05
ACM호텔 - 백준10250번  (0) 2021.04.05