๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

๋ฌธ์ œ

์–ด๋–ค ์ˆซ์ž์—์„œ k๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž 1924์—์„œ ์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋Š” 94 ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ์ˆซ์ž number์™€ ์ œ๊ฑฐํ•  ์ˆ˜์˜ ๊ฐœ์ˆ˜ k๊ฐ€ solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. number์—์„œ k ๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ ์กฐ๊ฑด

  • number๋Š” 1์ž๋ฆฌ ์ด์ƒ, 1,000,000์ž๋ฆฌ ์ดํ•˜์ธ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
  • k๋Š” 1 ์ด์ƒ number์˜ ์ž๋ฆฟ์ˆ˜ ๋ฏธ๋งŒ์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ’€์ด

๊ทธ๋ฆฌ๋””ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์—์„œ๋ถ€ํ„ฐ ์ž‘์€ ์ˆซ์ž๋ฅผ ์ฃผ์–ด์ง„ ๊ฐœ์ˆ˜๋งŒํผ ์ง€์›Œ์ฃผ๋ฉด ๋‚จ์€ ์ˆซ์ž๋“ค์„ ํ•ฉ์ณ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ์Šคํƒ์„ ๋งŒ๋“ค์–ด์„œ ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๊ฐ’๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋งŒ ์ง‘์–ด๋„ฃ๊ณ  ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋” ๋‚จ์•˜๋‹ค๋ฉด ๊ทธ ๋‹ค์Œ ์ˆซ์ž๋ถ€ํ„ฐ ๊ฐ™์€ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ

import Foundation
func solution(_ number:String, _ k:Int) -> String {
    var nums = Array(number)
    var stack : [Character] = []
    var eraseCount = 0
    
    while !nums.isEmpty && eraseCount != k {
        if !stack.isEmpty && !nums.isEmpty && nums.first! > stack.last! {
            while !stack.isEmpty && nums.first! > stack.last! {
                stack.popLast()
                eraseCount += 1
                if eraseCount == k {
                    break
                }
            }
            stack.append(nums.removeFirst())
        } else {
            stack.append(nums.removeFirst())
        }
    }
    
    while !nums.isEmpty {
        stack.append(nums.removeFirst())
    }
    
    while eraseCount != k {
        stack.popLast()
        eraseCount += 1
    }
    return String(stack)
}