본문 바로가기

알고리즘(w.KOTLIN)/정렬

[알고리즘][KOTLIN] 귤 고르기

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/138476

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이

1. 입력으로 주어지는 귤의 크기를 담은 배열에서 각각의 크기가 몇 개씩인 지를 저장하는 배열을 선언한다.

이때 귤의 크기 원소가 1부터 10,000,000 까지 제공되기 때문에 배열을 10,000,001 크기로 선언한다.

2. 입력으로 주어지는 귤의 크기 배열의 값을 Index 로 하여 1번에서 선언한 배열에 저장한다. 이때 개수를 저장하기 위해서

저장된 배열의 값에 1을 더해서 저장해 준다.

3. 저장을 완료한 배열을 내림 차순으로 정리한다. Kotlin 에서 제공하는 sortDescending 함수를 이용한다.

4. 3번에서 정렬한 배열을 하나씩 더해서 귤을 고르는 개수 K 만큼 될 때 까지 반복하여 결과를 구한다.

코드

class Solution {
    fun solution(k: Int, tangerine: IntArray): Int {
        var answer: Int = 0
        
        // 귤 크기 종류를 Index 로 하여 각 종류의 개수를 저장하는 배열을 선언한다.
        // 귤의 종류가 1부터 시작하기 때문에 배열 크기는 최대 크기에 1을 더한다. 
        val arr = IntArray(10000001) {
            0
        }
        
        tangerine.forEach { t ->
            arr[t] += 1
        }
       
        // 배열을 내림 차순으로 정렬한다.
        arr.sortDescending()
        
        var count = k
        var index = 0
        
        // 고를 개수 k 값이 될 때 까지 배열의 값을 뺀다.
        // 뺀 회수가 최종 결과가 된다.
        while (count > 0) {
            count -= arr[index++]
            answer++
        }
        
        return answer
    }
}

 

728x90

'알고리즘(w.KOTLIN) > 정렬' 카테고리의 다른 글

[BOJ][25305] 커트라인  (0) 2022.11.10
[BOJ][25305] 커트라인  (0) 2022.11.07