[Coding Test][Python] 백준 2869번: 달팽이는 올라가고 싶다.

2026. 3. 14. 19:19·개발/코테 준비
반응형

문제

https://www.acmicpc.net/problem/2869

 

코드

import sys
a, b, v = map(int, sys.stdin.readline().split())

d = (v-b-1)//(a-b) + 1
print(d)

가장 직관적인 방법은 while 반복문을 돌며 하루하루 올라가고 미끄러지는 과정을 반복하는 것이다. 

하지만 문제의 제한 시간이 0.25초 이내라는 점에서, 시간 초과를 고려한 풀이법이 필요했다.

 

첫 시도

반복문을 없애기 위해 달팽이의 움직임을 수학 수식으로 모델링해 보았다.

달팽이가 정상에 도달하는 데 걸리는 일수를 x라고 하자.

달팽이는 낮에 올라가고 밤에 미끄러지지만, 마지막 날에는 정상에 도달한 후 미끄러지지 않는다.

즉 x일 동안 A미터씩 올라가는 것은 x번, B미터씩 미끄러지는 것은 (x-1)번 일어난다.

이를 방정식으로 세우면 다음과 같다.

Ax - B(x-1) = V
Ax - Bx + B = V
x(A - B) = V - B
x = (V-B)/(A-B)

 

이 공식을 코드로 옮기면 다음과 같이 한 번의 나눗셈으로 며칠이 걸리는지 바로 알 수 있다.

import sys, math
a, b, v = map(int, sys.stdin.readline().split())

x = (v-b)/(a-b)
print(math.ceil(x)) # 소수점이 나오면 하루가 더 필요한 것이므로 올림 처리

 

개선

파이썬에서 / 연산자는 결과를 실수형으로 반환한다. 파이썬은 내부적으로 정밀도가 높지만 컴퓨터가 실수를 표현할 때는 근사치를 사용하기 때문에 미세한 오차가 발생할 수 있다. (실무에서 double이나 float를 무심코 사용한다면 1원이 비거나 더해지는 치명적인 정산 오차가 발생할 수 있다)

 

따라서 이런 오차 가능성을 원천 차단하려면 math.ceil과 실수 나눗셈( / )을 버리고 오직 정수형(integer) 연산만으로 올림을 구현해야 한다.

수학적으로 X를 Y로 나눈 올림값은 순수 정수 나눗셈만 사용하여 다음과 같이 구할 수 있다. (단, X,Y > 0)

올림 몫 = (X-1 / Y) + 1 

이 공식을 대입해 작성한 최종 식 코드는 다음과 같다.

days = (v - b - 1) // (a - b) + 1

 

반응형

'개발 > 코테 준비' 카테고리의 다른 글

[Coding Test][Python] 백준 10989번: 수 정렬하기 3 (계수 정렬)  (0) 2026.03.20
[Coding Test][Python] 백준 2775번: 부녀회장이 될테야  (0) 2026.03.14
[Coding Test][Python] 백준 2609번: 최대공약수와 최소공배수  (0) 2026.03.13
[Coding Test/Python] 백준 1259번: 팰린드롬수  (0) 2026.03.11
[Coding Test/Python] 백준 15829번: Hashing  (0) 2026.03.11
'개발/코테 준비' 카테고리의 다른 글
  • [Coding Test][Python] 백준 10989번: 수 정렬하기 3 (계수 정렬)
  • [Coding Test][Python] 백준 2775번: 부녀회장이 될테야
  • [Coding Test][Python] 백준 2609번: 최대공약수와 최소공배수
  • [Coding Test/Python] 백준 1259번: 팰린드롬수
danieLee
danieLee
개발일지
  • danieLee
    Code log
    danieLee
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • 개발 (76)
        • C++ (3)
        • java (6)
        • JavaScript (9)
        • python (0)
        • AWS (2)
        • Docker (6)
        • git (0)
        • 백엔드 (4)
        • Spring (7)
        • Django (2)
        • AI (3)
        • 코테 준비 (13)
        • 알고리즘 (6)
        • SKALA 4기 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코테
    java
    skala
    백엔드
    알고리즘
    spring
    프론트
    프로그래머스
    4기
    JavaScript
    서버
    대학생
    개발자
    vue.js
    개념
    js
    API
    개발
    Ai
    파이썬
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.1
danieLee
[Coding Test][Python] 백준 2869번: 달팽이는 올라가고 싶다.
상단으로

티스토리툴바