(Swift) 백준 2869 달팽이는 올라가고 싶다

SteadySlower·2022년 5월 17일
0

Coding Test

목록 보기
33/305

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

let input = readLine()!.split(separator: " ").map { Int(String($0))! }

let A = input[0]
let B = input[1]
let V = input[2]

// 마지막날 전까지 걸리는 날
var days = (V - A) / (A - B)

// 나머지
let rem = (V - A) % (A - B)

if rem != 0 {
    print(days + 2)
} else {
    print(days + 1)
}
  1. 미끄러지는 것을 감안했을 때 하루에 (A - B) 만큼 전진하는 달팽이입니다.
  2. 정상에 도달했을 때는 미끄러지지 않으므로 마지막날은 (A - B)가 아니라 무조건 A만큼 전진할 수 있습니다. 따라서 V가 아니라 (V - A)를 (A - B)로 나누어서 걸리는 날인 days를 구해놓습니다.
  3. 이제 마지막으로 남은 길이만큼의 전진하는 동안 걸리는 날을 구해야 합니다. 아래 그림을 같이 보도록 하죠!
    1. 먼저 나머지가 x만큼 있는 경우입니다. 이 경우 마지막 날 전까지 남은 길이는 A + x입니다. 즉 A만큼 전진해도 x가 남습니다. 마지막 하루 만에 올라갈 수가 없겠죠? 물론 x는 A - B보다 작으므로 이튿날에는 무조건 올라갈 수 있습니다. days에 + 2를 해줍시다.
    2. 마지막으로 나누어 떨어지는 경우입니다. 이 때는 남은 길이가 딱 A만큼 남았습니다. 따라서 마지막 날 A만큼 올라 정상에 도달했기 때문에 더 이상 미끄러지지 않습니다. days에 +1만 해주면 됩니다.
  4. 처음에 V - A를 가지고 계산해야한다는 점이 떠올리기 어렵습니다. 그리고 마지막 남은 길이 동안에 벌어질 일을 따지는 것도 쉽지는 않아요. 코드 자체는 그렇게 어려운 것이 없지만 말입니다.

profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글