문제 링크
문제 해설
문제의 로직 자체는 여러울 것이 없다. 단축키를 저장할 Set을 선언한 후 단축키를 지정하는 방법을 순서대로 진행하며 지정되는 단축키를 Set에 삽입하고, 지정된 단축키에 대괄호를 씌워서 출력하는 것을 반복하기만 하면 된다. 다만, 단축키는 대소문자를 구분하지 않으므로 Set에 단축키를 삽입할 때 대문자 또는 소문자로 통일해야 한다.
세부적인 로직은 다음과 같다.
- 각 줄로 입력받은 옵션의 이름을 공백을 구분자로 분리하여 각 단어의 첫글자를 Set에 삽입해본다.
- 단축키로 지정되었다면 해당 단축키에 대괄호를 씌워서 출력한 후 다음 옵션으로 넘어간다.
- 1의 과정을 진행하여 단축키가 지정되지 않았다면 옵션의 각 단어를 처음부터 문자단위로 탐색하며 Set에 삽입해본다.
- 단축키로 지정되었다면 해당 단축키에 대괄호를 씌워서 출력한 후 다음 옵션으로 넘어간다.
- 1과 2의 과정에서 단축키가 지정되지 않은 옵션은 그냥 그대로 출력한다.
로직 자체는 매우 간단하니 출력 형식을 맞춰서 출력하는 것만 신경써주면 된다.
Code
fun main() = with(System.`in`.bufferedReader()) {
val bw = System.out.bufferedWriter()
val n = readLine().toInt()
val hotKeys = HashSet<Char>()
loop@ for (i in 1..n) {
val optionWords = readLine().split(' ').toMutableList()
for (j in optionWords.indices) {
if (hotKeys.add(optionWords[j][0].lowercaseChar())) {
optionWords[j] = "[${optionWords[j][0]}]${optionWords[j].substring(1)}"
bw.write("${optionWords.joinToString(" ")}\n")
continue@loop
}
}
for (j in optionWords.indices) {
for (k in optionWords[j].indices) {
if (hotKeys.add(optionWords[j][k].lowercaseChar())) {
optionWords[j] = "${optionWords[j].slice(0 until k)}[${optionWords[j][k]}]${optionWords[j].substring(k + 1)}"
bw.write("${optionWords.joinToString(" ")}\n")
continue@loop
}
}
}
bw.write("${optionWords.joinToString(" ")}\n")
}
bw.close()
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 11444 : 피보나치 수 6 (2) | 2023.01.24 |
---|---|
[Kotlin] 백준 23309 : 철도 공사 (0) | 2023.01.19 |
[Kotlin] 백준 23629 : 이 얼마나 끔찍하고 무시무시한 수식이니 (0) | 2023.01.14 |
[Kotlin] 백준 22234 : 가희와 은행 (0) | 2023.01.13 |
[Kotlin] 백준 9080 : PC방 요금 (0) | 2023.01.12 |
댓글