
문제 풀이
문제는 간단하다 가장 반복되는 수를 더 해주면서 결과값을 도출하면된다,
하지만 문제는 시간초과이다. 내림차순을 해야하는데 이방법이 쉽지가 않다. 필자의 블로그에 오신분들도 아마 이런문제 때문에 오셨다고 생각한다.
방법은 간단한 오름차순을 해서 역순으로 체크하면 된다.
아마 Arrays.sort는 다들 아신다고 생각한다. 여기서 가장 뒤에값부터 체크한다.
(전체에서 Max값을 찾는방법, 2중 for으로 내림차순 정렬 다 해봤지만 시간초과가 뜬다.)
전체 소스
import java.util.*;
import java.io.*;
class Solution {
public int solution(int k, int[] tangerine) throws Exception {
int answer = 0;
int size = tangerine.length;
int max =0;
for(int i=0; i<size; i++){
if(tangerine[i]>max){
max =tangerine[i];
}
}
int [] array = new int[max+1];
for(int i=0; i<size; i++){
array[tangerine[i]]++;
}
Arrays.sort(array);
int sum=0;
while(sum<k){
int target=array[max];
max--;
sum += target;
answer++;
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'알고리즘(종합) > Lv.2' 카테고리의 다른 글
Softeer - 8단 변속기 (0) | 2023.02.17 |
---|---|
2001 - 파리퇴치 (0) | 2022.11.14 |
1204 - 최빈수 구하기 (0) | 2022.11.14 |
1954 - 달팽이 숫자 (0) | 2022.11.13 |
1926 - 간단한 369 게임 (0) | 2022.11.13 |