728x90
📚문제
📝풀이
# 내 풀이 - 오답
# 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
'Python(알고리즘,문제풀이) > BOJ(Bronze I)' 카테고리의 다른 글
백준 / 명령 프롬프트 / Python / 구현,문자열 (1) | 2024.01.24 |
---|---|
백준 / 10989 / 수 정렬하기3 / Python (0) | 2023.12.16 |