[JAVA/프로그래머스] 찾아라 프로그래밍 마에스터: 폰켓몬

👀 문제

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

👊 도전

1. 설계

  1. DP를 이용한다.
  2. dp[i][j]=max(dp[i-1][j] 빼고 나머지 dp[i-1][])+land[i][j]

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.*;
/**
 *
 * @author HEESOO
 *
 */
class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        // 해시셋에 종류 넣기
        HashSet<Integer> set=new HashSet<>();
        for(int num:nums){
            if(set.contains(num)) continue;
            set.add(num);
        }
        int canGet=nums.length/2; // 내가 선택할 수 있는 종류 최대 수
        // 그만큼 종류가 없다면 종류를, 아니면 선택할 수 있는 최대 수를 리턴
        answer= set.size()<canGet ? set.size(): canGet;
        return answer;
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. HashSet을 이용하여 종류를 센다
    • 내가 선택할 수 있는 종류의 수는 nums.length/2 (canGet)
    • nums의 종류가 canGet보다 작다면 nums의 종류를, 종류가 더 많다면 canGet을 리턴하면 된다.
    • 종류를 세기 위해 HashSet을 이용하여 중복을 거르고 종류들을 저장한다.

👏 해결 완료!