Post

[Programmers] #1845 - 폰켓몬 [Java][C++][Python]

폰켓몬 번호 배열에서 절반을 선택할 때 고를 수 있는 최대 종류 수를 구하는 문제.

[Programmers] #1845 - 폰켓몬 [Java][C++][Python]

문제 링크


1. 아이디어

N마리의 폰켓몬 중 절반(N / 2마리)을 선택할 때, 가능한 한 많은 종류를 가져가려면 서로 다른 종류의 수와 선택 가능한 마리 수 중 작은 쪽을 고르면 된다. 서로 다른 종류의 수보다 더 많이 골라봐야 어차피 중복이 생기고, 선택 가능한 마리 수보다 많이 가져갈 수도 없기 때문이다. 따라서 해시 집합에 모든 도감 번호를 담아 서로 다른 종류의 수를 구하고, N / 2와 비교해 작은 값을 반환해줬다.


2. 복잡도

접근시간공간
풀이$O(N)$$O(N)$

($N$ = nums의 길이)


3. 코드

풀이 [Java][C++][Python]

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.*;

class Solution {
    public int solution(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int x : nums) {
            set.add(x);
        }

        return Math.min(set.size(), nums.length / 2);
    }
}
1
2
3
4
5
6
#include <bits/stdc++.h>
using namespace std;

int solution(vector<int> nums) {
    return min(unordered_set(nums.begin(), nums.end()).size(), nums.size() / 2);
}
1
2
def solution(nums):
    return min(len(set(nums)), len(nums) // 2)

This post is licensed under CC BY 4.0 by the author.