๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ Swift

by Fomagran ๐Ÿ’ป 2020. 4. 4.
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

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

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

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

์ œํ•œ ์กฐ๊ฑด

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

์ž…์ถœ๋ ฅ ์˜ˆ

number k return
1924 2 94
1231234 3 3234
4177252841 4 775841

ํ’€์ด: ์šฐ์„  number๋ฅผ map์œผ๋กœ ๋‚˜๋ˆ ์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” ๊ธ€์ž๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ๋ ค๋ฉด index๊ฐ’์„ ์ •ํ•ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ท€์ฐฎ์•„์ง„๋‹ค.

๊ทธ๋ฆฌ๊ณค ์ˆ˜๋“ค์„ ๋‹ด์„ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์‚ญ์ œํ•œ ์ˆ˜๋ฅผ ์„ธ๋Š” count๋ผ๋Š” ๋ณ€์ˆ˜๋„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณค for๋ฌธ์„ number์˜ ๊ธธ์ด์— ๋งž๊ฒŒ ๋Œ๋ฆฌ๊ณ  for๋ฌธ ์•ˆ์—๋Š” while๋ฌธ์œผ๋กœ 3๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋‹ฌ์•„์ค€๋‹ค.

1.์‚ญ์ œํ•œ์ˆ˜(count)๊ฐ€ k๋ฅผ ๋„˜์ง€ ์•Š์„ ๊ฒƒ

2.stack์ด ๋น„์–ด์žˆ์ง€ ์•Š์„ ๊ฒƒ

3.์Šคํƒ์˜ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ๊ฐ’์ด ๊ทธ ๋‹ค์Œ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’๋ณด๋‹ค ํฌ์ง€ ์•Š์„ ๊ฒƒ

์•„๋ ‡๊ฒŒ 3๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•œ๋‹ค๋ฉด stack์˜ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ๊ฐ’์„ ์ง€์›Œ์ค€๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๊ทธ ๋‹ค์Œ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด 

์‚ญ์ œ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณค count๋ฅผ 1 ๋”ํ•ด์ค€๋‹ค.

while๋ฌธ์„ ๋น ์ ธ๋‚˜์™€์„œ count๊ฐ€ k์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋” ์ปค์กŒ๋‹ค๋ฉด 

stack์— map์˜ ์ง€๊ธˆ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋„ฃ์–ด์ค€๋‹ค, stack.append(map[i]..). (contentsOf:a...b -> a๋ถ€ํ„ฐ b๊นŒ์ง€ ๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค.)

๋งŒ์•ฝ ์•„์ง k๋ฅผ ๋„˜์ง€ ์•Š์•˜๋‹ค๋ฉด map[i]๋งŒ ๋„ฃ์–ด์ฃผ๋„๋ก ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์—” stack์„ ๋ชจ๋‘ ํ•ฉ์นœ ๊ธ€์ž stack.joined์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ธธ์ด์ธ number์˜ ๊ธธ์ด์—์„œ k๋ฅผ ๋บ€ ๊ฐ’๋งŒ

Stringํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import Foundation
 
func solution(_ number:String, _ k:Int-> String {
    let map = number.map{String($0)}
    var stack = [String]()
    var count = 0
    for i in 0..<number.count{
        while count < k && !stack.isEmpty && stack.last! < map[i] {
            stack.removeLast()
            count += 1
        }
            if count >= k {
                stack.append(contentsOf: map[i...])
                break
            }else{
                stack.append(map[i])
        }
    }
    return String(stack.joined().prefix(number.count-k))
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

๊ณ„์† 8๋ฒˆ๊ณผ 10๋ฒˆ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์—ˆ๋Š”๋ฐ contentsOf์™€ prefix๋กœ number.count-k๋กœ ๊ธธ์ด๋ฅผ ์ •ํ•ด์ฃผ๋‹ˆ๊น ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€