문제 링크: https://www.acmicpc.net/problem/1251
1251번: 단어 나누기
알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다. 먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다
www.acmicpc.net
한 시간을 풀다가 결국 못 풀었습니다.
첫 번째 시도 (틀렸습니다.)
package fourtysixth
import java.io.*
fun main(){
val br = BufferedReader(InputStreamReader(System.`in`))
val input = br.readLine()
val save = arrayListOf<Char>()
val range1 = input.length - 3
val range2 = input.length - 2
val range3 = input.length - 1
var start = 0
var index1 = 0
var value = input[start]
for (i in start + 1 .. range1){
if (value.code >= input[i].code){
value = input[i]
index1 = i
}
}
if (value.code == input[start].code && value.code != 97){
index1 = start
}
for (index in index1 downTo start){
save.add(input[index])
}
start = index1 + 1
var index2 = 0
var value2 = input[start]
for (i in start.. range2){
if (value2.code >= input[i].code){
value2 = input[i]
index2 = i
}
}
if (value2.code == input[start].code && value.code != 97){
index2 = start
}
for (index in index2 downTo start){
save.add(input[index])
}
start = index2 + 1
for (index in range3 downTo start)
save.add(input[index])
save.forEach{print(it)}
}
계속 생기는 반례를 고치려고 코드를 추가하다 보니
코드가 이상해졌습니다.
접근이 잘못됐나 싶어 다른 분의 코드를 확인하였습니다.
두 번째 시도 (맞았습니다.)
package fourtysixth
import java.io.*
fun main(){
val br = BufferedReader(InputStreamReader(System.`in`))
val input = br.readLine()
val save = arrayListOf<String>()
for (i in 1 until input.length - 1){
for (j in i + 1 until input.length){
val a = input.substring(0 until i).reversed()
val b = input.substring(i until j).reversed()
val c = input.substring(j until input.length).reversed()
var string = a + b + c
save.add(string)
}
}
save.sort()
println(save.first())
}
방법은 모든 경우의 문자열들을 모두 저장한 후,
정렬하여 가장 첫 번째 원소를 출력하면 되는 것이었습니다.
어떻게 이런 생각을 하죠..
'알고리즘 > 구현(백준)' 카테고리의 다른 글
[2023-05-16] 1475 방 번호 (Kotlin) (1) | 2023.05.16 |
---|---|
[2023-05-15] 1262 알파벳 다이아몬드 (Kotlin) (0) | 2023.05.15 |
[2023-05-15] 1235 학생 번호(Kotlin) (0) | 2023.05.15 |
[2023-05-12] 1138 한 줄로 서기 (Kotlin) (0) | 2023.05.12 |
[2023-05-12] 1138 킹 (Kotlin) (0) | 2023.05.12 |
댓글