Coding/Python

[코뮤니티] 달팽이의 정상 정복 파이썬(python)으로 구하기 (추석맞이 코딩챌린지)

폴밴 2021. 9. 19. 20:25

코뮤니티의 코딩 챌린지 2일차. 달팽이가 나무를 올라가기 위해서는 며칠이 걸리는 지 계산하는 문제입니다.

문제 내용은 다음과 같습니다.


달팽이는 높이가 N인 나무를 올라가고자 한다.

달팽이는 낮에는 A미터를 올라갈 수 있지만, 밤에 휴식을 취하면서 B미터 미끄러져 내려온다.

달팽이가 나무 정상에 도달하기 위해선 며칠이 걸릴까요?

조건 1 : 첫번째 줄에 A, B, N이 공백으로 구분되어 주어집니다.

조건 2 : 정상에 도달하는게 불가능할 경우, -1을 출력하세요. 수열은 수학에서 아래의 점화식으로 정의되는 수열입니다.


제가 생각한 방법은 다음과 같습니다.

n 일차 낮일 때 달팽이가 올라간 나무의 높이는 nA - (n-1)B 미터이고, 이때 정상에 도달했다고 한다면

nA - (n-1)B >= N 일 때의 n을 구하면 답이 나오게 됩니다.

하지만, 올라가는 거리보다 밤에 미끄러지는 거리가 길다면 (A > B) 정상에 도달하는게 불가능하므로 제외해야 합니다.

이를 코드로 구현할 방법을 생각해봤습니다.

x = 0
a, b, n = map(int, input().split())

while True:
    if a < b:
        print("-1")
        break
    elif x * a - (x - 1) * b >= n:
        print(x)
        break
    else:
        x += 1

첫 번째 조건문에서 정상을 도달하지 못할 때를 확인하고,

두 번째 조건문에서 정상에 도달했을 때의 일 수 (x)를 출력하도록 했습니다.

세 번째 조건문에서는 정상에 도달할 때까지 x 에 1을 더해가는 방식으로 값을 구하도록 하였습니다.

테스트 결과값은 다음과 같습니다.

A = 2, B = 1, N = 5
A = 100, B = 101, C = 100000000

정해진 조건에 도달할 때까지 조건문을 계속 반복하는 구조이기 때문에,

시간이 오래 걸리는 코드라 썩 효율적인 코드는 아닌 것 같다는 생각이 들지만

아직 파이썬 실력이 부족해 더 공부가 필요한 것 같습니다...