본문 바로가기
프로그래머스 Algorithm

[프로그래머스] 귤 고르기 Kotlin

by Echung 2023. 12. 23.
thumbnail
thumbnail

안녕하세요. 이번에는 프로그래머스 귤 고르기 문제를 풀어보려고 합니다. 

Problem


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

 

프로그래머스

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

programmers.co.kr

Solution


class Solution {
    fun solution(k: Int, tangerine: IntArray): Int {
        var answer: Int = 1
        var copyK = k
        
        tangerine.groupBy { it }.values.sortedByDescending {
            it.size
        }.forEach {
            copyK -= it.size
            
            if(copyK > 0) {
                answer++
            }
        }
        
        return answer
    }
}

 이번 문제는 다른 종류의 수를 최소화하기 위해서는 가장 많은 크기들을 구하면 되는 문제입니다. Kotlin에서 제공해 주는 groupBy를 이용하면 문제를 쉽게 해결할 수 있습니다.

1. GroupBy를 활용해서 그룹화합니다.

2. GroupBy의 값들을 sortedByDescending으로 내림차순으로 정렬해 줍니다. 여기서 Descending 해주는 이유는 다른 종류의 수를 최소화하기 위해서는 가장 많은 크기를 넣어야 되기 때문입니다.

3. K의 값을 채워야 하기 때문에 귤의 개수를 빼주고 만약 k의 값을 만족하지 못한다면 answer++을 해줍니다.

4. K의 값이 0 이하가 되면 정답을 출력해 줍니다.

 

1. 다른 사람 코드

class Solution {
    fun solution(k: Int, tangerine: IntArray): Int {
        var answer: Int = 0
        var limit = 0
    	tangerine.groupBy { it }.toList().sortedByDescending { it.second.size }.forEach{
   	    	if(limit >= k){
        	    return answer
        	}
        	
            limit += it.second.size
        	answer++
    	}

    	return answer
    }
}
이번 코드는 비슷한 접근 방법으로 접근한 것을 알 수 있습니다. 여기서 핵심은 GroupBysortedByDescending을 통해서 그룹화와 내림차순정렬이 중요한 것 같습니다.

Performance

1. 내가 작성한 코드 2. 다른 사람 코드
반응형