반응형

ㅍ백준 2869번 문제입니다. (solved.ac)기준 브론즈 1 문제입니다.

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

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

문제 접근

아주 간단하게 구현만 하면 되는 문제라고 생각하고 반복문을 사용하여 문제에 접근하였는데 시간초과 에러가 발생했었습니다. 시간제한을 보니 0.15초 입니다. 반복문을 사용하여 문제를 해결할 수 없도록 아주 타이트한 시간 제한을 두었습니다. 알고리즘 분류를 확인하여 보니 '수학'이었습니다. a, b, v를 사용하여 원하는 값을 출력하는 수식을 만들어 문제를 해결하였습니다.

 달팽이는 v높이의 나무에 오르고 싶어하고 낮에 a만큼 오르고 밤에는 b만큼 미끄러져 내려옵니다.

정상에 올라간 후에는 미끄러지지 않는다고 하였기 때문에 (v-a)값을 하루에 오르는 거리(a-b) 로 나누어준 후 처음에 (v-a)를 해주었기 때문에 하루를 더해줍니다(+1). 

따라서 다음과 같은 식이 나오게 됩니다. (v-a) / (a-b) + 1 만약이 식이 나누어 떨어지지 않고 소숫점이 나오게 된다면 그만큼 올라가는데 하루가 더 소요될 것이기 때문에 Python의 math 모듈에 있는 ceil을 사용하여 올림 처리를 해주었습니다.

정답 코드

import sys
import math

# 낮에 올라갈 수 있는 a, 밤에 미끄러지는 b, 막대기 높이 v
a, b, v = map(int, sys.stdin.readline().rstrip().split())

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

print(math.ceil(days))

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기