반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "프로그래머스(Lv.2) - 큰 수 만들기" 문제를 풀었습니다.
목차
Github
문제 링크
풀이
이번 문제는 그리디로 분류되어 있지만 스택으로 풀어보았습니다.
아직도 그리디로는 어떻게 풀어야 할지 모르겠고... 다른 분도 다 스택으로 풀었더라고요..??
참 당황스러웠어요..
수를 저장하는 스택과 지운 개수를 위한 변수 하나를 선언합니다.
top과 다음 수를 비교하며 다음 수가 top보다 커질 때까지 pop을 하고 다음 수를 push합니다.
k만큼 수를 지웠다면 이후의 숫자는 모두 push 해줍니다.
마지막으로 전체 길이 - k만큼 잘라 출력합니다.
전체 길이 - k만큼 자르지 않아 마지막에 고생을 했네요.
자르는 이유는 k만큼 수를 지운 뒤 이후 숫자를 모두 push 했기 때문입니다.
전체 코드
import Foundation
func solution(_ number:String, _ k:Int) -> String {
let numbers = number.map { Int(String($0))! }
var stack: [Int] = []
var count = 0
for i in 0..<numbers.count {
while !stack.isEmpty && stack.last! < numbers[i] && count < k {
stack.popLast()
count += 1
}
if count >= k {
stack.append(contentsOf: numbers[i..<numbers.count])
break
} else {
stack.append(numbers[i])
}
}
return stack[0..<numbers.count - k].map { String($0) }.joined()
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형