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
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers_Java] 체육복 (0) | 2021.07.25 |
---|---|
[Programmers_Java] 숫자 문자열과 영단어 - 2021 카카오 채용 연계형 인턴십 (0) | 2021.07.22 |
[Programmers_Java] 로또의 최고 순위와 최저 순위 (0) | 2021.07.21 |
[Programmers_Java] 키패드누르기(카카오 인턴십) (0) | 2021.07.19 |
[Programmers_Java] 완주하지 못한 선수 (0) | 2021.06.08 |