😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

[2869번] 달팽이는 올라가고 싶다 / python3 (쉽게 풀기)

또방91 2021. 11. 12. 10:53
728x90

문제 링크: https://www.acmicpc.net/problem/2869

 

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

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

www.acmicpc.net


❌ 1차시도 실패 (시간초과)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 나무높이v, 낮에a미터 올라가고 밤에 b미터 내려감
# 끝까지 올라가려면 며칠 걸리는지?
# 정상 도달 후 미끄러지지 않음
 
# 1차시도(시간초과)---------------------
import sys
a,b,v=map(int,input().split())

# i는 걸린 일수 (반복문 돌리기!)
for i in range(1,sys.maxsize):
    
    if i*(a-b)<v<=i*(a-b)+a:
        print(i+1)
        break
cs

시간초과가 나왔다....

시간제한을 보니.... ㅋㅋㅋㅋ 

얄짤없는 단호박 멘트가 있었당

 

0.15초 시간안에 우리는 많은 일을 할 수 있구나라고 깨달으면서.... 

다시 방법을 생각해보았다.


❓ 정답은 ??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#2차시도(성공)------------------------
a,b,v=map(int,input().split())
 
x=(v-b)/(a-b)
# x가 정수일수도 있고 소수일수도 있음
# 정수인경우: 낮시간 꼬박해서 정상 도달
# 소수인 경우: 낮시간 중간에 정상도달
 
#정수인 경우
if x==int(x):   
    print(int(x))
 
#소수인 경우 int하면 버림되니까 1 더해줌
else:   
    print(int(x)+1)
cs

💯 풀이 과정

x를 걸린 일수라고 하면

v = a*x - b * (x-1)이라고 할 수 있다.

우리가 구하고자 하는 x에 대해서 정리해보자면

x=(v-b)/(a-b) 임!! 하지만 이 결과 값이 아래와 같이 분류할 수 있다!
# x가 정수일수도 있고 소수일수도 있음
# 정수인경우: 낮시간 꼬박해서 정상 도달
# 소수인 경우: 낮시간 중간에 정상도달

😎오늘의 한줄평: 달팽이는 귀엽지만 시간초과 달팽이는 싫다🐌

728x90