Post

[Programmers] 1845번 - 폰켓몬 [Java][C++]

[Programmers] 1845번 - 폰켓몬 [Java][C++]

문제 링크


1. 문제 풀이


$N$ 마리의 폰켓몬 중 $N / 2$ 마리를 선택할 수 있을 때, 고를 수 있는 폰켓몬 종류의 수의 최댓값은 전체 폰켓몬 종류의 수가 $N / 2$ 이상이면 각 종류마다 한 마리를 골라 $N / 2$ 종류를 고를 수 있고, 전체 폰켓몬 종류의 수가 $N / 2$ 미만이면 모든 종류를 고를 수 있어 전체 폰켓몬 종류의 수만큼 고를 수 있다. 즉, 고를 수 있는 폰켓몬 종류의 수의 최댓값은 전체 폰켓몬 종류의 수와 $N / 2$ 중 더 작은 값이 된다. 해시셋을 활용해 폰켓몬을 저장하면 해시셋의 크기가 폰켓몬 종류의 수가 되는 점을 활용했다.


2. 코드


1. 풀이 [Java]

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 n : nums) {
            set.add(n);
        }

        return Math.min(set.size(), nums.length / 2);
    }
}


2. 풀이 [C++]

범위 생성자를 활용해서 간단하게 작성했다.

1
2
3
4
5
6
7
8
9
10
#include <algorithm>
#include <unordered_set>
#include <vector>

using namespace std;

int solution(vector<int> nums) {
    unordered_set<int> st(nums.begin(), nums.end());
    return min(st.size(), nums.size() / 2);
}

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