본문 바로가기
코딩테스트 준비/백준

[백준 2869번] 달팽이는 올라가고 싶다

by rahites 2022. 1. 6.

 

제목만 보고 달팽이 배열 문제일 거라 생각했다. 생각해보니 달팽이 배열에선 위로 올라갈 수가 없지

 

-- 처음 짠 코드

 

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로 다음과 같이 코드를 만들었다. 

 

 

 

성공적으로 달팽이를 위로 올려보냈다 ㅎㅎ

댓글