A, B, N이 주어진다.

하루에 A만큼 기억하다 B만큼 까먹는다 할때 N까지 도달하기 위한 날을 구하는 문제다.

A, B, N = map(int, input().split())

result = 0
day = 0
while(True):
    day += 1
    result += A 
    if result >= N:
        break
    result-= B
    
print(day)

다음과 같이 단순하게 코딩을 해보았다.

그러나 여기서 수식을 대입하면 단순 반복이 아닌 효율적인 방법을 찾을것 같았다.

관계를 찾는다면 반복문보다 단순 계산이 훨씬 효율적일 것이다.

 

그래서 수식으로 관계를 살펴보았다.

A, B, N을 각각 7, 3, 25이라 했을 때 다음과 같은 결과를 얻는다.

 

즉 6일차에 목표를 달성하는 것이다.

밤은 배제하고 일만 봤을 때 우리는 다음과 같은 식을 만들 수 있다. 7+(n-1)(7-3) 

정리해보면 다음과 같은 수식이 성립하고 조건에 맞는 n을 찾는다면 우리는 쉽게 찾을 수 있다. 7+(n-1)(7-3) >= 25

(n-1)(7-3) >= 25-7 ------>  n >= (25-7) / (7-3) + 1  이다. 이를 기호로 나타내면 day >= (N-A) /(A-B) + 1 인 정수인 것이다.

 

그래서 다음과 같이 코딩하였다.

A, B, N = map(int, input().split())

if ((N-A)/(A-B) + 1) % 1 == 0: # 1로 나누었을때 나누어 떨어지는지 = 정수인지 판별
    day = int((N-A)/(A-B) + 1)
else:
    day = int((N-A)/(A-B) + 1) + 1

    
print(day)

'<코딩테스트> > [기타 문제-기초]' 카테고리의 다른 글

[012] 아이큐왕  (0) 2024.09.24
[011] 림보  (0) 2024.09.19
[007~009] 문제풀이  (0) 2024.09.15
[006]가장 큰 나머지  (0) 2024.09.15
[005] ID만들기  (1) 2024.09.15

+ Recent posts