[ 문제 ]
https://programmers.co.kr/learn/courses/30/lessons/1845
* 제한사항
nums는 폰켓몬의 종류 번호가 담긴 1차원 배열입니다.
nums의 길이(N)는 1 이상 10,000 이하의 자연수이며, 항상 짝수로 주어집니다.
폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수로 나타냅니다.
가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다.
*입출력 예
nums result
[3,1,2,3] 2
[3,3,3,2,2,4] 3
[3,3,3,2,2,2] 2
[ 제출 ]
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
Set<Integer> p = new HashSet<Integer>();
Set<Integer> p = new HashSet<Integer>();
for(int e : nums) p.add(e);
if(p.size() > nums.length/2)
answer = nums.length/2;
else
answer = p.size();
if(p.size() > nums.length/2)
answer = nums.length/2;
else
answer = p.size();
return answer;
}
}
}
}
[ 풀이 ]
nums의 int형 배열을 set으로 자료형변환을 통해 중복을 제거한다.
최대값은 N/2이므로 set에 담긴 요소의 갯수가 더 크다면 N/2를 반환한다.
[ 다른사람풀이 ]
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] nums) {
public int solution(int[] nums) {
return Arrays.stream(nums)
.boxed()
.collect(Collectors.collectingAndThen(Collectors.toSet(),phonekemons
-> Integer.min(phonekemons.size(), nums.length / 2)));
}
}
}
첫번째 풀이의 기능을 자바 스트림을 이용하여 실행
코드가 좀더 간결해지고 내부반복자를 사용하기에 병렬처리가 용이하다.
댓글 없음:
댓글 쓰기