본문 바로가기

문제 풀이/Programmers

[프로그래머스] 폰켓몬 (JAVA)

문제 출처 - Programmers

문제는 여기

 

코딩테스트 연습 - 폰켓몬

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

programmers.co.kr


[풀이]

1. max를 N/2마리로 담아준다.

2. 중복 허용이 되지 않는 HashSet에 값들을 넣어준다.

3. 중복이 제거된 2. 에서 구한 set의 크기가 1. 에서 구한 max보다 크다면 max를 리턴하고 아니라면 set의 크기를 리턴해준다.

[접근]

1. 중복을 제거해주고 중복이 없는 수와 최대로 데려갈 수 있는 수를 비교해서 처리해주면 되겠다고 생각하였다.

2. N/2마리를 데려갈 수 있는데 중복 없을 때의 수가 N/2보다 적으면 중복 없을 때의 수만큼을 데려갈 수 있고 아니라면 N/2마리를 데려갈 수 있다.

[코드]

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        // 중복이 없는 상태에 최대로 데려갈 수 있는 경우는 N/2마리
        int max = nums.length / 2;
        HashSet<Integer> set = new HashSet<>();

        // set은 중복허용x
        for (int num : nums) {
            set.add(num);
        }

        // 중복을 제거했을 때 max보다 크면 max, 작으면 size를 리턴
        return set.size() > max ? max : set.size();
    }
}