TIL/알고리즘 공부

백준 2869번 Swift 알고리즘 연습

여의도사노비 2022. 8. 24. 12:21
728x90

달팽이가 특정 높이의 나무에 올라가는데 걸리는 날짜를 구하는 문제이다.

신경써줘야 할 것은 특정 높이(V)에 도달한 순간 계산이 종료된다는 것.

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. height를 up으로 뺐을 때 0보다 낮거나 0이 된다면 break
  2. 0 초과라면 for 문을 통해 count를 증가시킨다.

논리가 굉장히 단순하여 금방 풀것 같았는데 역시나 백준의 기본 수학 파트는 연산 시간이 관건인듯하다.

위의 논리대로 for 문을 사용할 경우 적은 숫자는 연산이 가능했지만 10000000이 넘어가는 큰 숫자들은 전부 연산 시간이 오버되었다.

 

따라서 특정한 값을 산출할 수 있는 수식으로 코드를 바꿨다.

ceil은 평소 거의 쓰지 않았던 메써드인데 숫자를 올림해주는 기능을 가지고 있어 소요일(count)가 정수로 떨어지지 않고 초과하는 경우, 이를 하루라고 잡기위해 사용하였다.

 

 

* 2869번

import Foundation

var input = readLine()!.split(separator: " ").map { Double(String($0))! }
var up = input[0]
var down = input[1]
var height = input[2]
var count = ceil((height - down) / (up - down))

print(Int(count))

 

 

정리(Today I Learned)

  1. ceil(): 올림 기능을 사용하고 싶을 때 사용하는 메서드. Double, Float 등의 소수점이 포함되는 타입에 종종 쓰인다.