[백준 : 2910] 빈도 정렬(kotlin)

JJAE WON·2022년 6월 2일
0

👇🏻문제 확인하기
백준:2910 - 빈도 정렬

문제

입출력

문제 풀이

  1. 수열의 빈도를 확인하기 위해 map을 만들어 숫자별로 빈도를 정리한다.
  2. 빈도가 높은 순서대로 정렬한다.
  3. 빈도가 같다면 인덱스가 앞에 있는 순서대로 정렬한다.

입력으로 받은 수열을 새로운 변수 map 을 선언해서 key값으로 숫자를 저장하고 value값에 나온 횟수를 저장한다.
compatator을 사용해서 첫번째 정렬 조건인 빈도순으로 정렬한다.
thenBy를 사용해서 그 다음 정렬 조건인 인덱스순으로 정렬한다.
joinToString()을 사용해서 배열을 string으로 만들어준다.

내가 작성한 코드

fun main(){
    readln().split(" ").map { it.toInt()}
    val numbers = readln().split(" ").map { it.toInt() }
    val map = mutableMapOf<Int,Int>()

    numbers.forEach{ map[it] = (map[it]?:0).plus(1) }

    val frequencyComparator = compareBy<Int> { map[it] }.reversed()
    val indexComparator = frequencyComparator.thenBy{numbers.indexOf(it)}

    println(numbers.sortedWith(indexComparator).joinToString(" "))
}

한줄평

속도가 엄청 빨리 나왔다.. 뿌듯..

profile
안드왕 찐천재가 되고싶다.

0개의 댓글