프로그래머스_귤 고르기

LeeYulhee·2023년 10월 4일
0

💻 문제 출처 : 프로그래머스_귤 고르기

👉 내가 작성한 답


import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        
        int total = 0;
        int answer = 0;
        int tangerineLength = tangerine.length;
        
        Arrays.sort(tangerine);
        
        int[] typeIndex = new int[tangerine[tangerineLength - 1] + 1];
        
        for(int i : tangerine) {
            typeIndex[i]++;
        }
        
        Arrays.sort(typeIndex);
        
        for(int i = typeIndex.length - 1; i >= 0; i--) {
            answer++;
            total += typeIndex[i];
            if(total >= k) {
                return answer;
            }
        }
        
        return answer;
    }
}
  • 📌 접근 방식
    • 종류 별 개수를 저장하는 배열을 만듦(인덱스가 종류, 값이 종류의 개수)
    • 해당 배열을 오름차순 정렬 후 가장 큰 값부터 더해가면서 총 더한 값이 k와 같거나 클 때 answer return
  • 📌 문제 풀이 설명
    • int 변수 total과 answer를 선언하고 0으로 초기화
    • int 변수 tangerineLength를 선언하고 tangerine의 길이로 초기화
    • Arrays.sort로 tangerine 배열을 오름차순 정렬
    • int 배열 typeIndex를 선언하고 tangerine 배열의 가장 마지막 값(가장 큰 값) + 1의 길이로 생성
    • 향상된 for문으로 tangerine을 순회
      • typeIndex[i]에 1을 증가
    • Arrays.sort로 typeIndex 배열을 오름차순 정렬
    • for문으로 typeIndex의 길이 - 1부터 i가 0보다 크거나 같은 동안 1씩 감소하며 순회
      • answer 1 증가
      • total에 typeIndex[i] 더함
      • 만약 total이 k보다 크거나 같은 경우
        • return answer
    • for문 종료 후 return answer
      • 여기까지 실행되지는 않음



👉 다른 사람이 작성한 답


import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        HashMap<Integer,Integer> map =new HashMap<>();

        for (int t : tangerine) {
            map.put(t, map.getOrDefault(t, 0) + 1);
        }

        List<Integer> list = new ArrayList<>(map.keySet());
        list.sort((o1, o2) -> map.get(o2)-map.get(o1));

        for(Integer key:list){
            k -=map.get(key);
            answer++;
            if(k<=0){
                break;
            }
        }

        return answer;
    }
}
  • 📌 접근 방식
    • Map에 종류 별 개수를 저장
    • Map의 key를 List로 만들어서 Map의 value에 따라 내림차순 정렬하고, key에 해당하는 value를 k에 빼면서 k가 0보다 작거나 같아지면 return answer
  • 📌 문제 풀이 설명
    • int 변수 answer를 선언하고 0으로 초기화
    • Integer를 key로 갖고, Integer를 value로 갖는 HashMap 생성
    • 향상된 for문으로 tangerine 순회
      • tangerine 요소를 key로, map에 tangerine 요소가 key로 있다면 해당 값에 + 1, 없다면 0에 + 1을 해서 map에 put
    • map의 key를 keySet으로 ArrayList로 생성
    • list의 sort로 값 o1, o2를 map의 o2에 해당하는 value - map의 o1에 해당하는 value로 정렬
      • ⇒ list를 내림차순으로 정렬
    • 향상된 for문으로 list를 순회
      • k에서 list 요소에 해당하는 value를 뺌
      • answer 1 증가
      • 만약 k가 0보다 작거나 같은 경우
        • break로 for문 종료
    • for문 종료 후 return answer
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글