문제

 

내가 작성한 코드
# A(낮), B(밤), V(최종)
a, b, v = map(int, input().split())

if v <= a:
    print(1)
else:
    if (v-a)%(a-b) != 0:
        print( ((v-a)//(a-b)) + 2)
    else:
        print( ((v-a)//(a-b)) + 1)

> 풀 수 있을거 같은 문제였는데, 정말 안풀렸던 문제다...

> 처음부터 논리적으로 생각하면서 풀었으면 잘나왔을거 같은데, 급하게 풀라고해서 계속 막혔던거 같다.

 

코드 설명
# A(낮), B(밤), V(최종)
a, b, v = map(int, input().split())

> a는 낮에 올라갈 수 있는 길이, b는 밤에 내려오는 길이, v는 올라가야 할 최종 길이를 의미하는 각각의 변수입니다.

> 한 줄에 빈칸으로 입력되므로 map(int, input().split()) 함수를 사용했습니다.

 

if v <= a:
    print(1)
else:
    if (v-a)%(a-b) != 0:
        print( ((v-a)//(a-b)) + 2)
    else:
        print( ((v-a)//(a-b)) + 1)

> 먼저 v(최종 길이)가 a(낮에 올라갈 수 있는 길이)보다 같거나 작다면 하루만에 올라갈 수 있는 길이이므로 조건에 부합하면 print(1)을 출력하게했습니다.

> 이 코드에서 엄청 시간을 잡아먹었습니다. 일단 먼저 제일 많이 올라갈 수 있는 날은 하루 지나고 그 다음날 낮일 때 올라갈 수 있는길이가 가장 긴 시점입니다.

> 가장 높게  올라갈 수 있는 길이 = (a - b) + a  

> 그러므로 (v -  a)에 (a - b)로 나눠주면 최소 일자를 구할 수 있습니다. 

> 만약 (v - a) % (a- b) == 0 이라면 +1 을 해주어서 다음 날 a 만큼 올라간 것도 포함을 시켜주었습니다.

> 만약 (v - a) % (a - b) != 0 이라면 몫이 0이어서 하루만에 갈 수 있는 경우이거나, 최소 일자 + a 보다 더 올라가야 할 경우라고 볼 수 있습니다. 그러므로 , ((v- a) // (a-b)) + 2를 해주면 원하는 결과를 추출할 수 있습니다.

+ Recent posts