본문 바로가기
  • 주니어 개발자의
    RESTful 성장기
Algorithm/Programmers

[찾아라 프로그래밍 마에스터 - 포켓몬]

by 돌건 2021. 7. 25.
  • 문제

https://programmers.co.kr/learn/courses/30/lessons/1845

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

 

  • 분석 및 접근
해당 문제는 단순히 중복을 제거한 후, 가져갈 수 있는 최대 포켓몬의 수를 구하는 문제이다.
중복을 제거할 수 있는 다양한 방법이 존재하겠지만, 필자는 Set Collection을 사용했다. Set은 Map과는 다르게 중복된 값을 가지지 않기 때문이다.

결론적으로, 포켓몬의 종류가 담긴 배열의 값을 모두 Set 변수에 담은 후 Set에 저장된 값의 개수(size)가 distinct한 포켓몬의 종류의 개수가 된다. 이에 따라 포켓몬의 개수 N의 반인 N / 2과 Set의 size를 비교해 가질 수 있는 최대 포켓몬 종류를 구한다.
import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int len = nums.length;
        
        Set<Integer> set = new HashSet<>();
        
        for(int index = 0; index < len; index++) {
            set.add(nums[index]);
        }
        
        int half = len / 2;
        
        if(set.size() < half) {
            answer = set.size();
        }
        else answer = half;
        
        return answer;
    }
}

댓글