[프로그래머스] 큰 수 만들기 Swift

승아·2021년 6월 14일
0

프로그래머스-큰 수 만들기

나의 풀이

핵심은 stack에 새로 들어운 수보다 작은 수들을 지워주는 것이다. 이걸 어떻게 추론하셨을까 .. 어렵다 .. 😅
12번 테이스트케이스는 ("77777",1), ("777711111",1) 와 같이 하나도 안지워지는 경우이다. 이 때는 가장 작은 수가 가장 뒤에 있기 때문에 뒤에서 부터 k번 지워주면 된다.

import Foundation

func solution(_ number:String, _ k:Int) -> String {
    var arr = Array(number).map{
        return Int(String($0))!
    }
    
    var stack: [Int] = []
    var cnt = 0

    for i in 0..<arr.count{
		// 새로들어온 수보다 작은 수를 지워준다. 
        while stack.count > 0 && stack.last! < arr[i] && cnt < k{
            stack.removeLast()
            cnt += 1 // 지운 횟수 체크
            
            if cnt == k{
                break
            }
        }

        stack.append(arr[i])
    }
    // 테스트 12번 
    if cnt == 0 {
        for i in 1...k{
            stack.removeLast()
        }
    }
    
    return stack.reduce(""){ $0 + "\($1)"}
}

0개의 댓글