문제해석:가장큰값을 찾고(같은수가 여러개면 가장앞에거) 해당값보다 바로밑에있는 작은거(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
}
}
'알고리즘' 카테고리의 다른 글
릿코드 1814. Count Nice Pairs in an Array 코틀린 (0) | 2023.11.22 |
---|---|
릿코드 2391. Minimum Amount of Time to Collect Garbage 코틀린 (1) | 2023.11.21 |
릿코드 1838. Frequency of the Most Frequent Element 코틀린 (0) | 2023.11.19 |
릿코드 1877. Minimize Maximum Pair Sum in Array 코틀린 (0) | 2023.11.18 |
릿코드 1980. Find Unique Binary String 코틀린 (0) | 2023.11.17 |