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

PearLine_Zero·2024년 3월 25일

하루에 1커밋 CodingTest

목록 보기
65/110
post-thumbnail
  • 티어 : Bronze 1
  • 정답여부 : 오답
  • 알고리즘 유형 : 수학
  • 시간 제한 : 0.25초

💡문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

💡입력

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

💡출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

💡예제 입력 1

2 1 5

💡예제 출력 1

4

💡예제 입력 2

5 1 6

💡예제 출력 2

2

💡예제 입력 3

100 99 1000000000

💡예제 출력 3

999999901

💡문제요약

달팽이가 나무 막대를 올라가는데 며칠이 걸리는 출력하면 되는 문제

💡알고리즘 설계

  1. A,B,V 올라가는 내려가는 나무막대 숫자를 입력 받고
  2. 달팽이가 올라간 거리 변수 M과 횟수 count를 만듬
  3. 달팽이가 올라간 거리 M이 아직 최종을 못 갔을때 while 문으로 돌리는데
  4. 이미 낮에 도착한 경우는 내려가는 수를 빼지 말고 +1 break
  5. 그렇지 않은 경우는 그냥 계산
  6. 최종 count를 출력

💡작성코드

  • python
A, B ,V = map(int, input().split())
M = 0 # 현 시점 달팽이가 올라간 거리
count = 0 # 달팽이가 최종 목표까지 올라간 횟수
while M < V:
    if (M + A) >= V: # 이미 낮에 도착을 한 경우
        count+=1
        break
    else:
        M = M + A - B
        count+=1     
print(count)   

💡틀린 이유 or 수정할 부분

  • 시간 착각 : 0.25초를 못 보고 문제를 풀어서 시간초과가 나왔다. 결국 입력시 바로 출력이 되야하는 문제로 while 반복문을 쓰면 안되는 문제 그럼 공식을 만들어서 코드를 작성해야 함
  1. 만약(V - B) % (A - B) == 0 라면 이미 낮에 완주를 한 것으로 보는 것으로 나머지 한 몫을 출력
  2. 그렇지 않은 경우 낮에 완주를 못 한 것으로 +1 더해줘야 함

💡틀린 부분 수정 or 다른풀이

  • python
A, B ,V = map(int, input().split())
count = 0
if (V - B) % (A - B) == 0:
    count+= (V - B) // (A - B)     
else :
    count+= (V - B) // (A - B) + 1
print(count)       

💡느낀점 or 기억할 정보

사간을 잘 봐야지...ㅎㅎ

profile
https://baesaa0304.tistory.com 블로그 이사합니다~

0개의 댓글