수학적으로 접근하면 쉽게 풀 수 있는 문제입니다
수학적으로 접근하기 위해서는 문제를 먼저 이해해야 합니다.
문제에서는 낮에는 A만큼 올라가고 밤에는 B만큼 다시 내려오면서 V미터인 나무 막대 정상을 오르려 합니다.
이때 나무 막대 정상에만 오르면 되기 때문에 오르는 날의 밤에 내려오는 높이는 고려하지 않아도 됩니다.
그렇기 때문에 na - (n-1)b = v 라는 공식을 새울 수 있게 됩니다. 이 식으로 n 을 구하면 다음과 같습니다.
이때 주의해야할 것은 만약 나누고자하는 분모와 분자가 정수로 나눠떨어지지 않으면 해당 날짜에 1을 추가해줘야 합니다.
예를들어 입력값 a = 5, b = 1, v = 6 인 경우를 생각해볼 수 있습니다
- v-b = 5
- a-b = 4
- 정답=2
이런 상황에서 해당 값이 나눠 떨어지지 않을 때 값을 1 더해줘야 하는 것을 확인할 수 있습니다.
즉 코드는 다음과 같습니다.
var line = readLine()!.split(separator: " ").map { Int($0)! }
var a = line[0]
var b = line[1]
var v = line[2]
let day_int = (v-b)/(a-b)
let day_mod = (v-b)%(a-b)
print(day_mod == 0 ? day_int : day_int+1)
'Algorithm > Baekjoon' 카테고리의 다른 글
Swift - 18110번 sovled.ac (0) | 2024.08.20 |
---|---|
Swift - 백준 11651번 좌표 정렬하기 2 (0) | 2024.08.19 |
Swift - 백준 11050번 이항 계수1 (0) | 2024.08.16 |
Swift - 백준 2609번 최대공약수와 최소공배수 (0) | 2024.08.12 |
Swift - 백준 2164번 카드2 (큐) (0) | 2024.08.12 |