1- import Foundation
1+ let nk = readLine ( ) !. split { $0 == " " } . map { Int ( $0) ! } ,
2+ n = nk [ 0 ] ,
3+ k = nk [ 1 ]
4+ var numbers : [ Int ] = readLine ( ) !. map { Int ( String ( $0) ) ! } . reversed ( )
25
3- // MARK: - using FileIO, thanks to Wapas
6+ var stack = [ Int] ( )
7+ var popCount = 0
48
5- //print(answer.map{ "\($0)" }.joined(separator: " "))
6- //collectoin을 전체출력할 땐 forEach 말고 [String]으로 변환 후 joined로 String으로 압축 후 print로 출력하는게 더 빠름
7-
8- var file = FileIO ( )
9-
10- let n = file. readInt ( )
11- let k = file. readInt ( )
12- let numbers = file. readString ( ) . map { $0. wholeNumberValue! }
13- let capacity = n - k
14- var stack : [ Int ] = [ ]
15-
16- for i in stride ( from: n- 1 , to: - 1 , by: - 1 ) {
17- if stack. count < capacity{
18- stack. append ( numbers [ i] )
19- } else if numbers [ i] >= stack. last!{
20- for j in stride ( from: capacity - 2 , to: - 1 , by: - 1 ) {
21- if stack [ j] > stack [ j+ 1 ] {
22- stack. remove ( at: j+ 1 )
23- stack. append ( numbers [ i] )
24- break
25- }
26- if j == 0 {
27- stack. remove ( at: j)
28- stack. append ( numbers [ i] )
29- }
30- }
9+ while popCount < k, !numbers. isEmpty {
10+ guard let number = numbers. popLast ( ) else { break }
11+ while popCount < k, let last = stack. last, last < number {
12+ stack. popLast ( )
13+ popCount += 1
3114 }
15+ stack. append ( number)
3216}
3317
34- print ( stack. reversed ( ) . map { " \( $0) " } . joined ( ) )
35-
36-
37- // MARK: - FileIO
38-
39- struct FileIO {
40- private let buffer : [ UInt8 ]
41- private var index : Int = 0
42-
43- init ( fileHandle: FileHandle = FileHandle . standardInput) {
44-
45- buffer = Array ( try ! fileHandle. readToEnd ( ) !) + [ UInt8 ( 0 ) ] // 인덱스 범위 넘어가는 것 방지
46- }
47-
48- @inline ( __always) private mutating func read( ) -> UInt8 {
49- defer { index += 1 }
50-
51- return buffer [ index]
52- }
53-
54- @inline ( __always) mutating func readInt( ) -> Int {
55- var sum = 0
56- var now = read ( )
57- var isPositive = true
58-
59- while now == 10
60- || now == 32 { now = read ( ) } // 공백과 줄바꿈 무시
61- if now == 45 { isPositive. toggle ( ) ; now = read ( ) } // 음수 처리
62- while now >= 48 , now <= 57 {
63- sum = sum * 10 + Int( now- 48 )
64- now = read ( )
65- }
66-
67- return sum * ( isPositive ? 1 : - 1 )
68- }
69-
70- mutating func readIntArray( _ K: Int ) -> [ Int ] {
71- var array = [ Int] ( )
72-
73- for _ in 0 ..< K {
74- array. append ( readInt ( ) )
75- }
76-
77- return array
78- }
79-
80- @inline ( __always) mutating func readString( ) -> String {
81- var now = read ( )
82-
83- while now == 10 || now == 32 { now = read ( ) } // 공백과 줄바꿈 무시
84- let beginIndex = index- 1
85-
86- while now != 10 ,
87- now != 32 ,
88- now != 0 { now = read ( ) }
89-
90- return String ( bytes: Array ( buffer [ beginIndex..< ( index- 1 ) ] ) , encoding: . ascii) !
91- }
92-
93- mutating func readStringArray( _ K: Int ) -> [ String ] {
94- var array = [ String] ( )
95-
96- for _ in 0 ..< K {
97- array. append ( readString ( ) )
98- }
99-
100- return array
101- }
102-
103- @inline ( __always) mutating func readByteSequenceWithoutSpaceAndLineFeed( ) -> [ UInt8 ] {
104- var now = read ( )
105-
106- while now == 10 || now == 32 { now = read ( ) } // 공백과 줄바꿈 무시
107- let beginIndex = index- 1
108-
109- while now != 10 ,
110- now != 32 ,
111- now != 0 { now = read ( ) }
18+ while !numbers. isEmpty {
19+ stack. append ( numbers. popLast ( ) !)
20+ }
11221
113- return Array ( buffer [ beginIndex..< ( index- 1 ) ] )
114- }
22+ while popCount < k {
23+ stack. popLast ( )
24+ popCount += 1
11525}
26+
27+ print ( stack. map { " \( $0) " } . joined ( ) )
0 commit comments