본문 바로가기
Algorithm and PS/백준(Kotlin)

백준 - 20291 파일 정리 (코틀린)

by ESHC 2022. 3. 30.

[문제]

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

 

20291번: 파일 정리

친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를

www.acmicpc.net

[풀이]

문자열 문제이지만 문자열 처리 자체는 각 입력의 확장자만 알아내면 되기 때문에 split 함수로 구할 수 있다.

확장자를 키로 하고, 해당 확장자의 입력 횟수를 키의 값으로 해시에 저장하면 구할 수 있지만 사전순으로 출력을 해야하기 때문에 정렬이 가능한 TreeMap을 이용했다.

사전순이기 때문에 정렬에 대한 추가 코드가 필요없지만 내림차순이 필요할 땐 Iterator를 써줘서 찾아 낼 수 있다.

시간복잡도: TreeMap의 삽입과 탐색은 O(logN)이다.

[코드]

import java.util.*

private var n = 0
private lateinit var treeMap: TreeMap<String,Int>
fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    n = br.readLine().toInt()
    treeMap = TreeMap<String,Int>()
    repeat(n){
        val (_, extension) = br.readLine().split(".")
        val sum = treeMap[extension]
        treeMap.set(extension,if(sum == null) 1 else sum + 1)
    }
    treeMap.forEach {
        bw.write("${it.key} ${it.value}\n")
    }

    bw.flush()
    bw.close()
}

 

댓글