반응형
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
나름 깔끔하게 변수명 지어서 만들어봤지만,,
시간초과로 인해 while문을 사용하면 안되는 문제인 듯하다.
A, B, V = map(int, input().split())
snail_now = 0
day = 0
while snail_now <= V:
day += 1
snail_now += A
if snail_now >= V:
break
snail_now -= B
print(day)
반복문 사용하지 말고 해결하는 법을 찾고있다.
가장 문제가 되는 것은 V에 도달하는데 턱걸이로 도달하는게 아니라
V-A 이상을 올라가는 수를 찾아야 하는 것이다. V와 V-A 사이의 수에 도달했다면 +1만 하면 되기 때문.
(V-A) <= (A-B)*n
처음 발상은 이런 식이었다.
A-B가 몇 번 반복해야 V-A와 V 사이에 도달할지 생각했다.
N = 으로 넘기면 쉽게 해결될 거라는 느낌이 왔다.
n = ((V-A)/(A-B))+1
실행하니 1.25와 같은 실수가 나왔다. 올림처리를 해야한다..
올림처리 함수를 몰라서 if문을 사용하면 복잡하게나마 풀 수 있지만 그냥 함수를 찾아봤다.
import math
n = math.ceil((V-A)/(A-B))+1
math라는 모듈을 import해서 올림처리하는 math.ceil() 함수를 사용했다.
내림처리는 math,floor()
반올림 처리는 내장함수인 round()
import math
A, B, V = map(int, input().split())
n = math.ceil((V-A)/(A-B))+1
print(n)
간결한 코드 완성.
반응형
'백준 알고리즘' 카테고리의 다른 글
백준 [1244] 스위치 켜고 끄기 - JavaScript 풀이 (0) | 2025.02.05 |
---|---|
백준 5622 다이얼 - 자바 풀이 (0) | 2023.05.30 |
백준 2738 행렬 덧셈 - 자바 풀이 (0) | 2023.05.30 |
백준 [27866] 문자와 문자열 - 자바 풀이 (0) | 2023.05.25 |
백준 [2744] 대소문자 바꾸기 - 자바 풀이 (0) | 2023.05.25 |