👀 문제
https://programmers.co.kr/learn/courses/30/lessons/1845
👊 도전
1. 설계
- DP를 이용한다.
- 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. 설명
- HashSet을 이용하여 종류를 센다
- 내가 선택할 수 있는 종류의 수는 nums.length/2 (canGet)
- nums의 종류가 canGet보다 작다면 nums의 종류를, 종류가 더 많다면 canGet을 리턴하면 된다.
- 종류를 세기 위해 HashSet을 이용하여 중복을 거르고 종류들을 저장한다.