[프로그래머스][Java] 폰켓몬 (Lv.1) - 해시

박현아·2024년 11월 5일
0

programmers-java

목록 보기
25/35

👩‍💻 문제

https://school.programmers.co.kr/learn/courses/30/lessons/1845

🙋‍♀️ 답변

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        
        int answer = 0;
        
        // 총 가질 수 있는 폰켓몬 갯수 (N/2)
        int ponketmon = nums.length / 2;
        
        // HashMap은 중복 허용 X
        HashMap<Integer, Integer> map = new HashMap<>();
        
        // nums를 HashMap에 담아주기
        for (int num : nums) {
            map.put(num, 0); // key값이 포켓몬 번호
        }
        
        if (map.size() >= ponketmon) {
            answer = ponketmon;
        } else if (map.size() < ponketmon) {
            answer = map.size();
        }

        return answer;
    }
}

🤔

HashSet을 몰라서 HashMap을 썼는데 HashMap은 key-value의 쌍으로 저장하기 때문에 value에 그냥 임의의 값인 0을 일괄적으로 넣어줬다. 하지만 HashSet은 value만 저장하기 때문에 더 간단하게 풀 수 있었다. 밑의 답변은 HashSet으로 다시 푼 답변 !!

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        
        int answer = 0;
        
        // 총 가질 수 있는 폰켓몬 갯수 (N/2)
        int ponketmon = nums.length / 2;
        
        // HashSet은 중복 허용 X
        HashSet<Integer> set = new HashSet<>();
        
        // nums를 HashSet에 담아주기
        for (int num : nums) {
            set.add(num);
        }
        
        answer = set.size() >= ponketmon ? ponketmon : set.size();

        return answer;
    }
}

ChatGPT가 알려준 Stream API를 이용한 변환 방법
흥미롭군,,,,

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public int solution(int[] nums) {
        
        int answer = 0;
        
        // 총 가질 수 있는 폰켓몬 갯수 (N/2)
        int ponketmon = nums.length / 2;
        
        // Stream API를 사용하여 HashSet으로 변환
        HashSet<Integer> set = new HashSet<>(Arrays.stream(nums) // int[]를 IntStream으로 변환
                                             .boxed() // int를 Integer로 박싱
                                             .collect(Collectors.toList())); // List<Integer>로 변환 후 HashSet 생성자로 전달
        
        answer = set.size() >= ponketmon ? ponketmon : set.size();

        return answer;
    }
}

HashSet도 같이 정리해둬야겠다.

0개의 댓글