티스토리 뷰
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/148653
💡 구현 아이디어
- 0~4는 아래로 이동
- 6~9는 위로 이동, 그다음 자릿수 값 +1
- 5는 위로 갈지 아래로 갈지 모르니까 둘다 구해서 최소값 반환
💻 코드
import Foundation
func solution(_ storey:Int) -> Int {
let arr = String(storey).reversed().map{ Int(String($0))! }
let result = min(solve(num: 4, arr: arr),solve(num: 5, arr: arr))
return result
}
func solve(num: Int, arr: [Int]) -> Int {
var arr = arr
var result: Int = 0
var idx = 0
while idx < arr.count {
if arr[idx] == 10 {
if idx == arr.count - 1 {
arr.append(0)
}
arr[idx] = 0
arr[idx+1] += 1
}
if arr[idx] <= num {
result += arr[idx]
}else {
result += (10-arr[idx])
if idx == arr.count - 1 {
arr.append(0)
}
arr[idx+1] += 1
}
idx += 1
}
return result
}
❌ 틀린 이유 및 틀린 부분
5일 경우 위로 갈지 아래로 갈지 판단을 못했다. 그래서 둘다 구해주고 둘중 작은걸 고르기로 했다!
⏳ 시간 복잡도
O(n) - 각 자리의 수를 한번씩 순회하고 결과를 반환(2번 돌아서 2n 이지만? 빅오는 O(n)!)
📌 풀이 또는 기억할 정보
var storey = storey
var result = 0
while storey != 0 {
if storey % 10 > 5 || (storey % 10 == 5 && (storey / 10) % 10 >= 5) {
result += 10 - (storey % 10)
storey = (storey / 10) + 1
} else {
result += storey % 10
storey = storey / 10
}
}
return result
- 조건은 55 와 같이 연속적으로 등장하는 경우 위로 올라가서 내려오는 것을 선택, 만약 5가 단독으로 등장하면 아래로 내려가는 것을 선택
'PS > 문제 풀이' 카테고리의 다른 글
| [프로그래머스/Swift] 86971번 - 전력망을 둘로 나누기 (0) | 2025.03.09 |
|---|---|
| [프로그래머스/Swift] 152996번 - 시소 짝꿍 (0) | 2025.03.08 |
| [프로그래머스/Swift] 178870번 - 연속된 부분 수열의 합 (0) | 2025.03.06 |
| [프로그래머스/Swift] 68645번 - 삼각 달팽이 (0) | 2025.03.05 |
| [프로그래머스/Swift] 118667번 - 두 큐 합 같게 만들기 (0) | 2025.03.04 |
