해당 문제는 입력받은 포켓몬 종류를 해시맵에 종류를 키로 값은 카운트 값을 가지게 해서 넣고, 문제가 원하는 결과는 최대 다양하게 포켓몬 종류를 가지는 경우로 해시맵의 사이즈와 같다는 것을 알 수 있습니다. 제한조건으로 고를 수 있는 포켓몬 수는 입력받은 nums.length 의 반 이므로 Math.min으로 해시맵의 사이즈와 nums의 사이즈 중 작은값을 리턴하도록 구현했습니다.
단순하게 다 넣고 해시맵의 크기와 최대 고를수 있는 갯수중 작은 값을 리턴하는 방식과, 해시맵에 넣는 중 그 답변 크기가 maxChoice 크기보다 커질 경우 바로 종료 하는 방식도 있을듯합니다.
public int solution(int[] nums) {
int answer = 0;
Map<Integer, Integer> ketmonMap = new HashMap<>();
for (int num : nums) {
ketmonMap.put(num, ketmonMap.getOrDefault(num, 0) + 1);
}
return Math.min(nums.length / 2, ketmonMap.size());
}
public int solution2(int[] nums) {
int answer = 0;
int maxChoiceCount = nums.length / 2;
Map<Integer, Integer> ketmonMap = new HashMap<>();
for (int num : nums) {
int count = ketmonMap.getOrDefault(num, 0);
if (count == 0) {
answer++;
if(answer > maxChoiceCount) {
return maxChoiceCount;
}
}
ketmonMap.put(num, count + 1);
}
return answer;
}
'정리 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 짝지어 제거하기 (0) | 2022.04.07 |
---|---|
프로그래머스 - 124 나라의 숫자 (0) | 2022.04.06 |
프로그래머스 - 멀쩡한 사각형 (0) | 2022.04.04 |
프로그래머스 - 오픈채팅방 (0) | 2022.03.31 |
프로그래머스 - 문자열압축 (0) | 2022.03.30 |
댓글