[문제]
https://www.acmicpc.net/problem/2179
[풀이]
가장 비슷한 단어들은 인접한 단어들이기 때문에, 문자열을 정렬을 한다.
인접한 단어들을 비교하면서 비슷한 부분의 길이가 최대라면, 해당 문자를 저장을 한다.
저장을 하는 이유는 가장 긴 단어가 여러개일 수도 있기 떄문이다.
만약 입력이 noon,noone,koon,koone가 들어오게 되면
noon과 koon이 4글자로 가장 긴 단어가 되기 때문에 여러 개가 될 수 있다.
이렇게 가장 긴 단어가 저장된 배열을
정렬되지 않은 입력된 배열에서 앞부터 비교하여, 단어를 체크하여 출력한다.
[코드]
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.lang.Integer.min
fun main()
{
var br = BufferedReader(InputStreamReader(System.`in`))
var bw = BufferedWriter(OutputStreamWriter(System.out))
var arr = arrayListOf<String>()
repeat(br.readLine().toInt())
{
it ->
arr.add(br.readLine())
}
var copyArr = arrayListOf<String>()
copyArr.addAll(arr)
copyArr.sort()
var tmp = -1
var wordSet = mutableSetOf<String>()
for(i in 1 until copyArr.size)
{
var cnt = 0
for(j in 0 until min(copyArr[i-1].length, copyArr[i].length))
{
if(copyArr[i-1][j] != copyArr[i][j]) break
cnt++
}
if(tmp == cnt) wordSet.add(copyArr[i-1].substring(0,cnt))
if(tmp < cnt)
{
tmp = cnt
wordSet = mutableSetOf<String>()
wordSet.add(copyArr[i-1].substring(0,cnt))
}
}
var word = ""
for(i in arr)
{
if(word == "")
{
for(j in wordSet) {
if(i.length >= j.length && i.substring(0,j.length) == j) {
word = j
bw.write(i + "\n")
break
}
}
}
else
{
if(i.length >= word.length && i.substring(0,word.length) == word){
bw.write(i)
bw.flush()
bw.close()
return
}
}
}
}
'백준 > 기타' 카테고리의 다른 글
백준 [2143] - kotlin (0) | 2023.06.28 |
---|---|
백준 [10021] kotlin (0) | 2023.01.29 |
백준 [1197] kotlin (0) | 2023.01.27 |
백준 [10830] kotlin (0) | 2023.01.22 |
백준 [9935] kotlin (0) | 2023.01.19 |