728x90
가장 최소의 횟수로 물체를 움직여야하는 문제이다.
5와 3의 배수를 이용하되 5의 배수로 나누어 떨어지는 경우가 가장 횟수를 줄이기 쉬운 방법이라는 것을 염두에 두고 풀면 된다.
이 문제를 풀면서 생각한 논리적 흐름은
- input 값이 5로 나누어 떨어진다면 그 횟수가 최소이다.
- 5로 나누어지지 않는다면 최대한 5kg 부터 옮겨주고 남은 중량을 3kg로 옮겨주는 것이 최소 횟수이다.
- 5로 최대한 나누고 남은 중량을 3으로 나눴는데도 나누어 떨어지지 않는다면 그건 옮기지 못할 중량이다.
문제는 비교적 단순한데 while 문을 잘 안써서 그런지 while문 쓰는데 너무 헷갈렸다... while을 until의 개념으로 사용해버린 것 같다.
다행히 값이 안나오는 이유에 대해 의문을 품고 다시 while을 찾아보게 되었다... 30분 넘게 while 보느라 이젠 앞으로 안까먹을듯 :)
* 2839번
let input = Int(readLine()!)!
var a = input / 5
while true {
if (input - 5 * a) % 3 == 0 {
print(a + (input - 5 * a) / 3)
break
}
a -= 1
if a < 0 {
print(-1)
break
}
}
정리(Today I Learned)
- while의 반복 조건은 '~인 동안'이다. '~가 나올 때까지'가 아니다!
'TIL > 알고리즘 공부' 카테고리의 다른 글
백준 1978번 Swift 알고리즘 연습 (0) | 2022.08.30 |
---|---|
백준 10757번 Swift 알고리즘 연습 (0) | 2022.08.28 |
백준 2775번 Swift 알고리즘 연습 (0) | 2022.08.26 |
백준 10250번 Swift 알고리즘 연습 (0) | 2022.08.26 |
백준 1193번 Swift 알고리즘 연습 (0) | 2022.08.24 |