Skip to content

Commit 7b45563

Browse files
committed
[Gold III] Title: 크게 만들기, Time: 92 ms, Memory: 80780 KB -BaekjoonHub
1 parent 9e4270b commit 7b45563

File tree

2 files changed

+22
-110
lines changed

2 files changed

+22
-110
lines changed

백준/Gold/2812. 크게 만들기/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
### 성능 요약
66

7-
메모리: 91524 KB, 시간: 628 ms
7+
메모리: 80780 KB, 시간: 92 ms
88

99
### 분류
1010

1111
자료 구조, 그리디 알고리즘, 스택
1212

1313
### 제출 일자
1414

15-
2024년 4월 15일 14:31:16
15+
2025년 8월 15일 00:58:48
1616

1717
### 문제 설명
1818

Lines changed: 20 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,27 @@
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

Comments
 (0)