PS/문제 풀이
[프로그래머스/Swift] 42883번 - 큰 수 만들기
시르베어
2025. 2. 15. 22:05
풀이
- 스택을 사용해서 판별
- 스택이 비어있거나 스택의 Top이 나보다 크거나 같으면 푸쉬
- Top이 나보다 작으면 나보다 크거나 같은 수를 만날때 까지 팝을 해준다
- 이때 K를 하나씩 감소시키는데 0이되면 나머지를 전부 푸쉬한다
- 숫자를 전부 넣었는데 K가 남았다면 K만큼 팝을 해준다
- 스택에 들어있는 값을 반환한다
전체 코드
import Foundation
func solution(_ number:String, _ k:Int) -> String {
let number = number.map { String($0) }
var stack: [String] = []
var k = k
for num in number {
if let top = stack.last { // 스택이 비어있지 않은 경우
if top >= num { // 스택의 top이 나보다 크거나 같으면 스택에 넣음
stack.append(num)
}else { // 스택의 top이 나보다 작으면 나보다 크거나 같을 때까지 팝
// 이때 K를 다쓰면? 거기까지만 하고 프린트?
while !stack.isEmpty && k > 0 {
if stack.last! >= num { break }
k -= 1
stack.removeLast()
}
stack.append(num)
}
}else { // 스택이 비어있는 경우
stack.append(num)
}
}
return stack[0..<(stack.count-k)].joined()
}