본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 1845번: 폰켓몬 [Java]

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 코드

import java.util.*;
class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        HashSet <Integer> type = new HashSet<>();
        for(int i = 0; i < nums.length; i++)
            type.add(nums[i]);
        
        if(type.size() >= nums.length / 2)
            answer = nums.length / 2;
        else
            answer = type.size();
        return answer;
    }
}

2. 설명

int answer = 0;
HashSet <Integer> type = new HashSet<>();
for(int i = 0; i < nums.length; i++)
    type.add(nums[i]);

HashSet의 경우 값을 추가할 때 중복된 값은 추가하지 않기에 중복되지 않은 폰켓몬의 종류를 알아냅니다.

if(type.size() >= nums.length / 2)
    answer = nums.length / 2;
else
    answer = type.size();

만약 폰켓몬의 종류의 수가 고를 수 있는 폰켓몬의 수보다 크거나 같다면 answer에 고를 수 있는 폰켓몬의 수를 저장하며 아니라면 폰켓몬의 종류의 수만큼만 answer에 저장합니다.

3. 정리

  1. 폰켓몬의 종류의 수를 파악한다.
  2. 고를 수 있는 폰켓몬의 수   종류의 수 ⇨ 고를 수 있는 폰켓몬의 수가 정답이다.
  3. 종류의 수 < 고를 수 있는 포켓몬의 수 ⇨ 종류의 수가 정답이다.
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges