728x90
해시 문제라 HashSet을 사용하긴 했는데 전체적인 사고방식은 수학 풀이 같습니다.
일단 N 마리의 포켓몬 중에서 N/2 마리의 포켓몬을 선택할 수 있고, 포켓몬의 종류 개수를 P라고 가정하겠습니다.
그렇다면 P가 N/2보다 크다면 가져갈 수 있는 포켓몬의 최대 종류의 수는 N/2의 값이되고
P가 N/2보다 작거나 같다면 가져갈 수 있는 포켓몬의 최대 종류의 수는 P가 됩니다.
nums = [피카츄, 피카츄, 파이리, 꼬부기]
hashset = [피카츄, 파이리, 꼬부기]
때문에 위의 예시처럼 가져갈 수 있는 포켓몬의 수인 2마리보다 포켓몬의 종류 개수가 많다면
그냥 가져갈 수 있는 수를 리턴하면 됩니다.
nums = [피카츄, 피카츄, 피카츄, 파이리, 파이리, 파이리]
hashset = [피카츄, 파이리]
반대로 위처럼 가져갈 수 있는 포켓몬의 숫자가 3마리인데 포켓몬의 종류가 그 숫자보다 적다면
포켓몬 종류의 수를 리턴하면 됩니다.
import java.util.*;
class Solution {
public int solution(int[] nums) {
int length = nums.length;
Set<Integer> ponketmon = new HashSet<Integer>();
for(int i: nums){
ponketmon.add(i);
}
if((int)length/2 < ponketmon.size()){
return (int)length/2;
}else{
return ponketmon.size();
}
}
}
위에 코드는 제 풀이 코드입니다.
728x90
'Algorithm > Java 풀이' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 자바 풀이 (0) | 2022.10.06 |
---|---|
[프로그래머스] 베스트앨범 자바 풀이 (0) | 2022.10.02 |
프로그래머스 프린터 자바 풀이 (0) | 2022.09.23 |
프로그래머스 같은 숫자는 싫어 자바풀이 (1) | 2022.09.23 |
프로그래머스 K번째 수 Java풀이 (0) | 2022.09.14 |