[프로그래머스] 폰켓몬

fsm12·2023년 6월 15일
0

프로그래머스

목록 보기
13/57
post-thumbnail

문제링크

문제 이해

[ 입력형태 / 조건 ]

nums
폰켓몬의 종류 번호 | [3,1,2,3]

[ 문제 ]

=> N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아 그때의 폰켓몬 종류 번호의 개수를 return

[ 풀이 ]

가능한 한마리씩 다른 폰켓몬을 선택하는 것이 이득이므로, map에 폰켓몬을 종류:마리수 로 저장하여, 전체 map 크기와 비교해서 전체 마리수/2 보다 map 크기가 크면 전체 마리수/2를 리턴하도록 했음



코드

> [성공] 1차 시도 : Map 이용

  • 생각한 풀이 그대로 구현
import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int sum = 0;
        Map<Integer, Integer> map = new HashMap<>();
        for(int num : nums){
            sum+=1;
            Integer val = map.get(num);
            if(val == null){
                map.put(num,1);
                continue;
            }
            map.put(num, val+1);
        }
        return Math.min(map.size(), sum/2);
    }
}

=> 앞 테케에서 빠르게 실행이 되는줄 알았으나, 7.88ms라는 굉장히 느린 테케가 있었음



> [성공] 2차 시도 : Set 이용

  • 굳이 폰켓몬 종류 당 마리수를 저장할 필요가 없어서, Set에 저장하고 위와 같은 로직을 적용했음
import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int sum = 0;
        Set<Integer> set = new HashSet<>();
        for(int num : nums){
            sum+=1;
            set.add(num);
        }
        return Math.min(set.size(), sum/2);
    }
}

=> 4.37ms 이라는 속도가 굉장히 아쉬웠지만, 더 이상의 개선은 불가능해보였음



TIP : 최솟값 최댓값을 구할 때, Math의 max()와 min()을 쓰는 것 가독성에 좋다.

0개의 댓글