본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 138476번: 귤 고르기 [Java]

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

 

프로그래머스

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

programmers.co.kr

1. 코드

import java.util.*;
class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        Integer[] sum = new Integer[10000001];
        Arrays.fill(sum, 0);
        for(int t : tangerine)
            sum[t]++;
        Arrays.sort(sum, Collections.reverseOrder());
        
        int cnt = 0;
        for(int s : sum) {
            cnt += s;
            answer++;
            if(cnt >= k)
                break;
        }
        return answer;
    }
}

2. 설명

int answer = 0;
Integer[] sum = new Integer[10000001];
Arrays.fill(sum, 0);
for(int t : tangerine)
    sum[t]++;
Arrays.sort(sum, Collections.reverseOrder());

제한 사항 중 1 ≤ tangerine의 원소 ≤ 10,000,000라는 것이 존재하여 sum의 배열을 10000001로 하여 배열 생성 후 0으로 전부 초기화를 한 뒤 t를 인덱스 값으로 하여 sum 배열의 값을 1씩 증가시킨 뒤 내림차순으로 정렬합니다.

int cnt = 0;
for(int s : sum) {
    cnt += s;
    answer++;
    if(cnt >= k)
        break;
}

내림차순 된 sum의 값을 순차적으로 더하여 k와 동일하거나 넘으면 멈춥니다. 진행된 횟수를 answer에 저장합니다.

3. 정리

  1. 문제를 간단히 정리하면 크기 상관없이 종류만 적게 k개만큼만 채우는 것
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges