ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2869. [Python]달팽이는 올라가고 싶다.
    Python_알고리즘/Bronze I 2023. 2. 10. 21:23

    1. 문제

     

    https://www.acmicpc.net/problem/2869

     

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

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

    www.acmicpc.net

     

    2. 접근 방법

     

    • 시간 제한: 0.25초
    • 메모리 제한: 128MB
    • 규칙 찾기

     

    3. 파이썬 코드

     

    import math
    # 하루에 오르는 높이, 내려가는 높이, 정상의 높이를 변수로 받음
    A, B, V = map(int,input().split())
    # 오르고 내려오는 높이의 차이가 1인 경우 최종 높이에서 내려오는 높이를 뺴준 값이 답이된다.
    if (A-B) == 1:
        print(V-B)
    # 그 외의 경우 정상 높이에서 오를 수 있는 오전에 오를 수 있는 높이를 뺀 후 A-B 하루동안 오르락 내리락 한 높이를 나눠준다.
    # 나눠 준 후 math.ceil 소수점이 존재하면 올림을 해준다. => 정상에 낮시간동안 미리 도달할 수 있기 때문에.
    # 그 후 하루 뺴줬던 날을 다시 더해준다.
    else:
        print(math.ceil(((V-A)/(A-B))) + 1)

     

    4. 문제를 풀고난 후 생각

     

    • 달팽이가 낮시간동안 오르고 밤 시간동안 내려가고, 정상에 도달하면 내려가지 않는다. 이 말을 보면서 0.25초 동안 동작할려면 반복문이 아닌 다른 방식의 조건을 찾아야 겠다고 생각했다.
    • 예제를 보면서  어느 규칙을 찾아야 겠다고 생각이 들었고, 하루동안 움직인 거리 (A - B) 값이 1이 되는 경우 올라야 하는 높이에서 B(내려오는 거리)를 빼주면 일수가 되는 것을 생각했다.
    • 하루동안 움직인 거리 (A - B)가 1이 아닌 경우 목표 거리(V)에서 A(낮시간 동안 오르는 거리)를 빼준 후 하루동안 움직인거리 (A - B)를 나눠준다. 이때 값이 소수점이 존재할 경우 목표 거리(V) 보다 좀 더 거리를 더 갔다는 의미기 때문에 올림 처리를 해준 후 처음에 뺐던 A(낮시간동안 움직일 수 있는 거리)를 + 1 해준다.
    • 낮에는 오르고 밤에는 내려가기 때문에 하루에 움직일 수 있는 거리를 구했고, 만약 낮 시간동안 움직여서 목표 거리에 도달하면 밤에는 떨어지지 않기 때문에 미리 목표 거리에서 A를 뺴주고 일수를 구하는데 +1 을 진행해줬다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • X

    'Python_알고리즘 > Bronze I' 카테고리의 다른 글

    2775. [Python]부녀회장이 될테야  (0) 2023.01.22

    댓글

Designed by Tistory.