제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
Programmers 알고리즘 고득점 Kit입니다.

포인트

Map을 사용하여 푸는 문제였습니다. 폰켓몬의 종류와 폰켓몬의 갯수를 확인하는 것이 포인트였다고 생각합니다.

N/2 마리를 선택할 때 폰켓몬의 종류보다 N/2가 더 크면 폰켓몬의 종류를 리턴하고 반대면 N/2를 리턴하면 됩니다.

폰켓몬 소스코드

import java.util.*;

class Solution {
    
    public int solution(int[] nums) {
        Map<Integer, Integer> ponkets = new HashMap<>();
        for (int num: nums) {
            ponkets.put(num, ponkets.getOrDefault(num, 0) + 1);
        }
        
        int halfN = nums.length / 2;
        if (halfN <= ponkets.size()) {
            return halfN;
        } else {
            return ponkets.size();
        }
    }
}

코드 설명

 

  • Map<Integer, Integer> ponkets = new HashMap<>();
    정수형 num을 키로 하고, 각 숫자가 몇 번 등장하는지를 값으로 하는 해시맵 ponkets를 생성합니다.
  • for (int num: nums) { ponkets.put(num, ponkets.getOrDefault(num, 0) + 1); }
    nums 배열을 순회하면서 각 숫자가 ponkets 맵에 이미 존재하는지 확인합니다.
    • 존재하면 해당 숫자의 값에 +1을 합니다.
    • 존재하지 않으면 기본값 0에서 +1을 하여 새로운 키-값 쌍으로 추가합니다.
  • int halfN = nums.length / 2;
    nums 배열의 길이를 반으로 나눈 halfN을 계산하여 가질 수 있는 폰켓몬 수의 최대치를 나타냅니다.
  • if (halfN <= ponkets.size()) { return halfN; } else { return ponkets.size(); }
    고유한 폰켓몬의 종류 수(ponkets.size())와 halfN을 비교합니다.
    • halfN이 고유한 폰켓몬의 종류 수보다 작거나 같으면 halfN을 반환합니다 (최대 가질 수 있는 폰켓몬 수).
    • 그렇지 않으면 고유한 폰켓몬의 종류 수를 반환합니다.

 

+ Recent posts