백준 [2179] kotlin

[문제]

https://www.acmicpc.net/problem/2179

 

2179번: 비슷한 단어

첫째 줄에 S를, 둘째 줄에 T를 출력한다. 단, 이 두 단어는 서로 달라야 한다. 즉, 가장 비슷한 두 단어를 구할 때 같은 단어는 제외하는 것이다.

www.acmicpc.net

[풀이]

가장 비슷한 단어들은 인접한 단어들이기 때문에, 문자열을 정렬을 한다.

인접한 단어들을 비교하면서 비슷한 부분의 길이가 최대라면, 해당 문자를 저장을 한다. 

저장을 하는 이유는 가장 긴 단어가 여러개일 수도 있기 떄문이다.

만약 입력이 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