[programmers] 폰켓몬

2024. 9. 11. 15:41·알고리즘 오답노트/JAVA

문제 풀이 : 해당 문제는 중복되지 않는 수가 몇 개인지 찾아 출력하는 문제인데, 이때 출력 값은 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
'알고리즘 오답노트/JAVA' 카테고리의 다른 글
  • [programmers] 같은 숫자는 싫어
  • [programmers] 의상
  • [programmers] 전화번호 목록
  • [programmers] 완주하지 못한 선수
bogyeom
bogyeom
백엔드 개발자 준비중
  • bogyeom
    딩코링코
    bogyeom
  • 전체
    오늘
    어제
    • 분류 전체보기 (10)
      • Node.js (0)
        • 크리스마스 미니홈피 (0)
      • SPRINGBOOT (2)
        • 음악 스트리밍 서비스 (2)
        • 식당 추천 서비스 (0)
      • 우아한 테크코스 프리코스 (3)
      • 알고리즘 오답노트 (5)
        • JAVA (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
bogyeom
[programmers] 폰켓몬
상단으로

티스토리툴바