백준2869번

#백준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)

정답!

좋은 웹페이지 즐겨찾기