-
Notifications
You must be signed in to change notification settings - Fork 2
/
16719번 - ZOAC.kt
51 lines (42 loc) · 1.32 KB
/
16719번 - ZOAC.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* https://www.acmicpc.net/problem/16719 */
/* 퀵 정렬과 비슷한 분할 정복법 사용*/
import java.io.BufferedReader
import java.io.InputStreamReader
private var string = ""
private lateinit var addArray: CharArray
private val answer = StringBuilder()
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
string = readLine()
addArray = CharArray(string.length){' '}
addSmallestChar(0, string.lastIndex)
print(answer)
}
/**
* 퀵정렬과 비슷한 로직
* 가장 작은 문자를 찾아서 새배열에 기존의 위치와 동일하게 추가한다
* 그 문자열을 StringBuilder에 추가한다
* 찾은 문자의 오른쪽 문자열을 대상으로 재귀 함수를 호출한다
* 오른쪽이 다 끝나면 왼쪽 문자열에 재귀 함수를 호출한다
*/
private fun addSmallestChar(start: Int, end: Int) {
if (start > end) return
var minChar = string[start]
var index = start
for (i in start+1..end) {
if (minChar > string[i]) {
minChar = string[i]
index = i
}
}
addArray[index] = minChar
addLine()
addSmallestChar(index + 1, end)
addSmallestChar(start, index - 1)
}
private fun addLine() {
for (ch in addArray) {
if (ch == ' ') continue
answer.append(ch)
}
answer.appendLine()
}