제목만 보고 달팽이 배열 문제일 거라 생각했다. 생각해보니 달팽이 배열에선 위로 올라갈 수가 없지
-- 처음 짠 코드
a, b, v = map(int, input().split())
# 무조건 출력은 낮에 올라갔을 때 반복문이 중단되어 이루어질것
day = 1 # 걸리는 날짜 ( 일단 올라갔다고 생각 )
up = a # 올라간 높이 ( 올라갔다해 )
while up < v:
day += 1
up -= b
up += a
print(day)
생각이 가는대로 코드를 짜보았다. 물론 3번째 예시를 넣는 순간 아차 싶었다. 10억까지 100씩더하고 99씩 빼고 있었다 ㅋㅋㅋ
1씩 더해 10억까지 가는데는 1분정도 더 걸리는군..
참 이렇게 코드를 한번 짜고 다시 생각하려면 머리가 더 아픈 것 같다.
아무래도 하루에 올라갈 수 있는 높이를 구하고 (주어진 높이 - 낮에 올라가는 높이) 에서 나눠주면 될 것 같다.
-- 정답 코드
a, b, v = map(int, input().split())
up = a - b # 하루에 올라가는 높이
v2 = v - a # 마지막 날을 빼고 올라가면 되는 높이
if v2 <= 0: # 낮에 이미 다 올라갔다
print(1)
elif v2/up ==v2//up: # 나눈 결과가 정수일 경우
print(v2 // up + 1)
else:
print(v2 // up + 2)
열심히 짠 코드이지만 흠.. 다른 사람들도 이렇게 짰을까? 하는 생각은 든다. 좀더 간편하고 획기적인 풀이가 있을 것 같은 느낌적인 느낌느낌..
기본적인 코드를 짠 방법은 마지막 날은 낮에 올라가면 코드가 break 되기 때문에 마지막 날을 빼고 (뒤에 +1) 얼마나 올라가면 되는 지를 구해주었다. 이 과정에서 나누기를 써야 시간이 초과 되지 않을 것 같았고, 나눈 결과가 정수일 때는 올바른 결과가 나오지만 float형일 경우 올림을 해서 계산을 해야한다는 것을 발견, 따라서 elif와 else로 다음과 같이 코드를 만들었다.
성공적으로 달팽이를 위로 올려보냈다 ㅎㅎ
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준 2805번] 나무 자르기 - 이분탐색 예제 (0) | 2022.01.08 |
---|---|
[백준 1966번] 프린터 큐 - 큰 수부터 출력하여라 (0) | 2022.01.05 |
[백준 10989번] 수 정렬하기 3 - sort X (0) | 2022.01.04 |
댓글