백준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)
정답!
Author And Source
이 문제에 관하여(백준2869번), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leo-x/백준2869번저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)