
문제 풀이 : 해당 문제는 중복되지 않는 수가 몇 개인지 찾아 출력하는 문제인데, 이때 출력 값은 N/2보다 클 수 없는 조건을 갖고 있음
처음에는 해시 타입을 사용해 본 적이 없어서 막무가내로 배열을 만들어 하나하나 비교해보았음
시간 복잡도가 너무 올라가고, 정확도가 떨어져 해시맵을 사용해 봄
import java.util.HashMap;
class Solution {
public int solution(int[] nums) {
int answer = 0;
int a = nums.length;
HashMap<Integer, Integer> map = new HashMap<>();
for(int i=0; i<a; i++) {
map.putIfAbsent(nums[i], i);
}
if(map.size() >= a/2) {
answer = a/2;
} else{
answer = map.size();
}
return answer;
}
}
물론 이 방법도 정답이지만 더 간단하게 할 방법이 있을 것 같아 다른 분들의 풀이 방법과 ChatGPT를 사용해 HashSet이 더 적합하다는 걸 알았음
단순히 숫자만 비교하는 문제이기 때문에, 중복된 숫자는 삽입되지 않는 HashSet을 사용하는 것으로 수정
import java.util.HashSet;
class Solution {
public int solution(int[] nums) {
int answer = 0;
HashSet<Integer> set = new HashSet<>();
for(int i : nums) {
set.add(i);
}
answer = Math.min(set.size(), nums.length/2);
return answer;
}
}
코드 수정 후 훨씬 빠르고 간결해졌음

Java Streams API를 사용하여 풀이하신 분도 있었는데, 다음에는 스트림에 대해 공부해서 이를 이용해 다시 풀이해보고 싶음
'알고리즘 오답노트 > JAVA' 카테고리의 다른 글
| [programmers] 같은 숫자는 싫어 (0) | 2024.09.20 |
|---|---|
| [programmers] 의상 (0) | 2024.09.20 |
| [programmers] 전화번호 목록 (4) | 2024.09.13 |
| [programmers] 완주하지 못한 선수 (0) | 2024.09.11 |