문제: https://school.programmers.co.kr/learn/courses/30/lessons/138476
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. 정리
- 문제를 간단히 정리하면 크기 상관없이 종류만 적게 k개만큼만 채우는 것
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 131701번: 연속 부분 수열 합의 개수 [Java] (0) | 2023.09.19 |
---|---|
프로그래머스 - 76502번: 괄호 회전하기 [Java] (0) | 2023.08.26 |
프로그래머스 - 12914번: 멀리 뛰기 [Java] (0) | 2023.08.24 |
프로그래머스 - 12980번: 점프와 순간 이동 [Java] (0) | 2023.08.23 |
프로그래머스 - 12985번: 예상 대진표 [Java] (0) | 2023.08.22 |