알고리즘/Programmers

[Programmers_Java] 폰켓몬

씨네 2021. 7. 20. 21:57
728x90

처음에 이 문제를 봤을때 문제 자체가 이해가 잘 안갔어요 ㅠㅠ

 

근데 문제를 계속읽다 보니 또 이해가 갔는데요!

 

이해를 하고 보면 되게 간단합니다...

포켓몬을 고를건데 위의 예시에서는 2마리의 포켓몬을 선택할수 있습니다.

선택과정에서 [3, 3]의 포켓몬을 고르면 1가지 종류의 포켓몬만 가지게 되고 이 외에는 2마리의 포켓몬을 선택하게 됩니다.

따라서 2를 리턴합니다.

쉽죠?

3가지 테스트케이스가 주어졌습니다!

 

 

import java.util.HashSet;
import java.util.Set;

class Solution {
    public int solution(int[] nums) {
		int answer = nums.length / 2;

		Set<Integer> set = new HashSet<>();

		for (int i = 0; i < nums.length; i++) {
			set.add(nums[i]);
		}

		if (!(set.size() > answer)) {
			answer = set.size();
		}
		
		return answer;

    }
}

가장먼저 N/2마리를 선택할수 있기에 배열길이에서 2를 나누어 줍니다.

이때 굳이 새로운 변수를 선언할 필요가 없다고 판단되어 기존에 주어진 answer를 사용했습니다!

 

그리고 중복되는 값을 제거하기위해 Set을 사용하였습니다.

왜 중복값을 제거하냐구요??

 

어떻게 풀어야할까 고민하다가 테스트 케이스를 보고 힌트를 얻었습니다.

뭔가 규칙성이 있다는 걸알았는데요.

 

set에 들어있는 값의 수 즉 set의 크기와 answer를 비교하였을때 set의 크기가 더 크지 않다면 테스트 케이스의 결과가 나올수 있는 경우의수는 포켓몬을 선택하는 경우밖에 없습니다.

answer가 2라면 무조건 2가 리턴되어야하고 3이라면 무조건 3이 리턴되어야합니다.

반면 set의 크기가 answer보다 크다면? N/2를 리턴하면 됩니다!

728x90