[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.