본문 바로가기

Python(알고리즘,문제풀이)/BOJ(Bronze I)

백준 / 2869번 / 달팽이는 올라가고 싶다 / Python / 수학

728x90

📚문제

출처 : 백준 2869번 (https://www.acmicpc.net/problem/2869)


📝풀이

# 내 풀이 - 오답
# 2869번 달팽이는 올라가고 싶다
a,b,v = map(int,input().split())
height = 0
day = 0
while height < v:
    day += 1
    height += a
    if height >=v:
        break
    height -= b   
print(day)

 

처음 풀면서 그렇게 어렵진 않은데 ?

하고 생각했다가 제출해 보니까 역시 시간초과에 걸렸다...

그래서 정답률이 낮은 것 같다

 

다른 풀이를 보니

그분도 처음에 나랑 100% 똑같이 푸셨다가 

다른 방법을 찾으셨다

 

day = (v-b)/(a-b)

 

day를 이렇게 설정해 주는것

 

처음엔 이게 무슨 말이지 했는데

수식에 대입해서 풀어보니 간단했다

 

v라는 높이를 하루마다 (a-b)의 높이로 올라가면 

며칠이 걸리냐(몫이 얼마냐)라는 뜻이다

 

여기에다가 (v-b)를 해주는 이유는

아래 링크에서 아주 깔끔하고 명확하게 설명해주신다

참고링크 출처 : https://happyhyxndy.tistory.com/61

 

높이 v에 도달하는 데 걸리는 일 수 : x
올라가는 횟수 x번
내려오는 횟수 x-1번 ( x번째에서 이미 높이 v에 도달 했으므로 x번째에서는 내려오지 않아도됨)

식 
# a의 높이로 x번 올라간 높이에서 b의 높이로 (x-1)번 내려왔으니까 빼주면 총 높이 v 
a * x - b * (x-1) = v

최종 식
# x에 대해서 정리
x = (v-b) / (a-b)

나머지는 그냥 풀면됨

아 그리고 x가 소수점으로 나오기 때문에 올림하여 출력

1.xx, 2.xx일은 각각 2일 , 3일이 걸린다는 뜻이기 때문이다

 

 

# 최종 정답 코드
import math
a,b,v = map(int,input().split())
day = (v-b) / (a-b)
print(math.ceil(day))

 

728x90