백준/문제
29198번: 이번에는 C번이 문자열
스몰스테핑
2024. 9. 6. 16:22
문제 출처 : https://www.acmicpc.net/problem/29198
언어 : Kotlin
문제 설명 :
지난 대회에 이어 이번에도 문자열 문제를 출제하고 싶은 에릭은 다음과 같은 문제를 떠올렸다. 정답 코드를 짜기 귀찮은 에릭을 위해 대신 문제를 풀어주자!
- 길이가 M인 N개의 문자열 S_1, S_2, ..., S_N이 주어진다.
- 다음 방법으로 만들 수 있는 문자열 T 중 사전순으로 가장 앞에 오는 것을 출력한다.
- S_1, S_2, ..., S_N 중 K개를 선택한 후, 이어 붙여서 길이 K ... M의 문자열을 만든다.
- 이렇게 얻은 K ... M개의 문자를 적당히 재배치하여 문자열 T를 만든다.
서로 다른 두 문자열 a, b에 대해 다음 중 하나가 성립할 때 문자열 a가 문자열 b보다 사전순으로 앞에 온다고 말한다.
- a가 b의 접두사
- a와 b가 달라지는 첫 위치에서 a의 문자가 알파벳 순으로 b의 문자보다 앞에 위치함
입력 :
첫 번째 줄에 세 정수 N, M, K가 공백으로 구분되어 주어진다.
i + 1번째 줄에는 문자열 S_i가 주어진다. (1 ≤ i ≤ N)
출력 :
S_1, S_2, ..., S_N을 이용하여 위에서 설명한 방법으로 만들 수 있는 문자열 T 중 사전순으로 가장 앞에 오는 것을 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 1024MB
- 1 ≤ K ≤ N ≤ 300
- 1 ≤ M ≤ 300
- 는 영어 대문자로 구성된 길이 M의 문자열 (1 ≤ i ≤ N)
입출력 예 :
입력 | 출력 |
4 1 2 Y Y Z X |
XY |
3 4 2 ABCD AACC ABCC |
AAABCCCC |
풀이 :
import java.io.BufferedWriter
import java.io.OutputStreamWriter
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val (n, m, k) = readLine().split(" ").map { it.toInt() }
val list = MutableList(n) { readLine().toCharArray().sorted().joinToString("") }.sorted()
val sb = StringBuilder()
for (i in 0 until k) {
sb.append(list[i])
}
bw.write(sb.toString().toCharArray().sorted().joinToString(""))
bw.flush()
bw.close()
}