문제

내가 작성한 코드
# 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를 해주면 원하는 결과를 추출할 수 있습니다.
'Coding > 백준' 카테고리의 다른 글
| [2775번] 기본 수학1 - 부녀회장이 될테야 (★) (0) | 2022.07.21 |
|---|---|
| [10250번] 기본 수학1 - ACM 호텔 with Python (0) | 2022.07.20 |
| [1193번] 기본 수학1 - 분수찾기 with Python (★) (0) | 2022.07.20 |
| [2292번] 기본 수학1 - 벌집 with Python (★) (0) | 2022.07.20 |
| [1712번] 기본 수학1 - 손익분기점 with Python (0) | 2022.07.20 |