안녕하세요. 지난 포스팅의 BOJ 1193번 : 분수찾기에서는 그룹수열의 간단한 패턴을 분석하여 문제를 풀어보았습니다. 오늘은 부등식 문제를 해결하는 방법에 대해서 보도록 하겠습니다.
완벽한 코딩은 존재하지 않습니다. 제가 제출한 코드 역시 마찬가지고 그저 참고만 해주시길 바랍니다.
핵심 포인트
- math 라이브러리
제출 코드
import math
A, B, V = map(int, input().split())
print(math.ceil((V - A) / (A - B) + 1))
해설
기본적으로 이 문제의 입력은 3개의 변수($A, B, V$)가 공백을 가지고 입력되기 때문에 map 함수를 이용해서 입력을 받아줍니다. 일단, $x$을 달팽이가 $V$ 높이만큼 도달하는 날이라고 정의하겠습니다. 그리고 낮을 기준으로 달팽이의 높이를 계산해보도록 하죠. 이때, 하룻밤이 지나면 달팽이는 낮 동안 $A$만큼 올라갔다가 $B$만큼 미끄러지는 것을 감안해주셔야합니다.
$$\begin{align*} &\text{1 days} \rightarrow A \\ &\text{2 days} \rightarrow A + (A - B) \\ &\text{3 days} \rightarrow A + 2(A - B) \\ \vdots \end{align*}$$
위와 같은 규칙으로 달팽이는 $n$번째 날에는 $A + (n - 1)(A - B)$만큼 올라가게 될 것입니다. 이 값이 막대기의 전체 높이인 $V$보다 커지는 최소의 $n$이 곧 $x$가 될 것 입니다. 이를 부등식으로 정리하면 아래와 같습니다.
$$A + (n - 1)(A - B) \ge V \rightarrow x = \lceil \frac{V - A}{A - B} + 1\rceil$$
여기서 $\lceil \rceil$은 올림을 의미합니다. 이를 코딩으로 풀기 위해서 저는 파이썬 내장 라이브러리인 math 라이브러리의 ceil 함수를 활용하여 문제를 풀었습니다.
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 2775번 : 부녀회장이 될테야 (0) | 2022.07.11 |
---|---|
BOJ 10250번 : ACM 호텔 (0) | 2022.07.10 |
BOJ 1193번 : 분수찾기 (0) | 2022.07.08 |
BOJ 2292번 : 벌집 (0) | 2022.07.06 |
BOJ 1712번 : 손익분기점 (0) | 2022.07.05 |