https://school.programmers.co.kr/learn/courses/30/lessons/148653#
첫 번재 테스트 케이스를 통해 5보다 클 경우, 올림 / 5보다 작거나 같을 경우 내림을 생각했다.
두 번째 테스트 케이스의 경우 2550이 되었을 때, 2600과 2500으로 가는 경우 모두 5개의 돌을 추가로 사용하게 된다. 이후 숫자들을 모두 점검했을 때 해당 테스트 케이스는 이전과 같은 로직으로 올림으로 처리하는 것이 최소값이 되었지마, 다른 테스트 케이스를 생성해 점검이 필요했다. 55를 예시로 들 경우, 이전과 동일하게 50 → 0으로 가는 것보다 60 → 100 → 0 으로 가는 것이 더 최소값이 나온다. 45와 65는 이전과 동일한 로직으로 처리하는 것이 최소값이 나온다. 즉 현재 가리키고 있는 값이 5이고, 이전 값이 5보다 큰 경우에 예외 처리를 해주면 된다.
5보다 큰 경우 올림 / 현재 가리키는 값이 5이고 이전 인덱스도 5보다 클 경우 올림 / 나머지의 경우는 내림
func solution(_ storey:Int) -> Int {
var storey = String(storey).map{ Int(String($0))! }
var ans = 0
for i in stride(from: storey.count-1, to: -1, by: -1){
if storey[i] > 5 {
ans += 10 - storey[i]
if i == 0 {
ans += 1
} else {
storey[i-1] += 1
}
}
else if storey[i] == 5 && i > 0 && storey[i-1] >= 5 {
storey[i-1] += 1
ans += 5
}
else {
ans += storey[i]
}
}
return ans
}
[프로그래머스] 명예의 전당 (1) (0) | 2024.03.14 |
---|---|
[프로그래머스] 콜라 문제 (0) | 2024.03.13 |
[프로그래머스] 최소 직사각형 (0) | 2024.03.08 |
[프로그래머스] 스티커 모으기(2) (1) | 2024.03.05 |
[프로그래머스] 큰 수 찾기 (0) | 2024.03.05 |