본문 바로가기

알고리즘

릿코드 1887. Reduction Operations to Make the Array Elements Equal 코틀린

문제해석:가장큰값을 찾고(같은수가 여러개면 가장앞에거) 해당값보다 바로밑에있는 작은거(1,3,5면 3)로 변환
배열내의 모든 수가 같아지면 변환횟수리턴

 

풀이:1,3,5,5면 1,3,3,3(2회변형) 1,1,1,1(3회 변형)이 되니까(총 5회변형)

그냥 딕셔너리나 해시맵에 현재 값들 갯수를 다 넣은다음,정렬뒤에서부터 값의 갯수를 카운트값에 더하고,현재카운트값을 결과값에 계속더하다가 가장 작은수가 나오면 반복문탈출

 

class Solution {
    fun reductionOperations(nums: IntArray): Int {
        val numHashMap = hashMapOf<Int, Int>()
        for (i in nums){
            numHashMap[i]= numHashMap[i]?.plus(1) ?:1
        }
        val numSet = nums.toSet().sorted().reversed()
        println("numSet = ${numSet}")
        var res=0
        var count=0
        val min= nums.min()
        for (key in numSet){
            println("""${key} ${numHashMap[key]}""")
            val value=numHashMap[key]?:throw IllegalArgumentException("잘못된에러")
            if (key!=min){
                count += value
                res+=count
            }
        }
        println(res)

        return res
    }
}