[Kotlin] 백준 1302번 베스트셀러 with 코틀린

: ) YOUNG·2022년 5월 3일
2

Kotlin 알고리즘

목록 보기
5/28
post-thumbnail

문제

백준 1302번
https://www.acmicpc.net/problem/1302


김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.

오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.


생각하기

HashMap을 사용해서 쉽게 문제를 풀 수 있었다.
예외로 생각해야 할 부분은 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.
를 생각해야 하기 때문에 결과를 출력하기 전에 미리 이름순으로 정렬을 해두고 시작했다.

동작

    var map = HashMap<String, Int>();
    while(N-->0) {
        var name : String = br.readLine()
        map.put(name, map.getOrDefault(name, 0) +1);
    }

책이름이 들어오는 데로 map의 getorDefault 메소드를 활용해서 책의 개수를 파악했고,

fun sortMapByKey(map : Map<String, Int>) : LinkedHashMap<String, Int> {
    val entries = LinkedList(map.entries)

    entries.sortBy{ it.key }

    val result = LinkedHashMap<String, Int>();
    for(entry in entries) {
        result[entry.key] = entry.value
    }

    return result
}

같은 개수를 대비해서 이름순인 key을 기준으로 정렬하는 함수를 만들었다.




코드


import java.io.*;
import java.util.*
import kotlin.collections.HashMap
import kotlin.collections.LinkedHashMap

fun main() {
    var br = BufferedReader(InputStreamReader(System.`in`));
    var N = Integer.parseInt(br.readLine())

    var map = HashMap<String, Int>();
    while(N-->0) {
        var name : String = br.readLine()
        map.put(name, map.getOrDefault(name, 0) +1);
    }

    val sortedMap = sortMapByKey(map);
    var max = Int.MIN_VALUE;
    var result : String = ""

    for((key, value) in sortedMap) {
        if(max < value) {
            max = value;
            result = key;
        }
    }

    print(result)
} // End of main

fun sortMapByKey(map : Map<String, Int>) : LinkedHashMap<String, Int> {
    val entries = LinkedList(map.entries)

    entries.sortBy{ it.key }

    val result = LinkedHashMap<String, Int>();
    for(entry in entries) {
        result[entry.key] = entry.value
    }

    return result
}

0개의 댓글