먼저 배열 nums를 중복제거한 후 갯수를 세야겠다고 생각했다.
중복제거에는 여러가지 방법이 있지만 나는 HashSet으로 중복제거 하기로 했다.
뽑을 포켓몬 수 < 중복제거된 포켓몬 수 이면 뽑을 포켓몬수가 최댓값이 되고
뽑을 포켓몬 수 > 중복제거된 포켓몬 수 이면 중복제거 된 포켓몬을 모두 포함해야 하기 때문에 최댓값은 중복제거 된 포켓몬 수가 된다
내 코드
import java.util.Arrays;
import java.util.HashSet;
class Solution {
public int solution(int[] nums) {
int answer = 0;
int n = nums.length / 2;
HashSet<Integer> hashSet = new HashSet<Integer>();
for(int num : nums) hashSet.add(num);
int hashSize = hashSet.size();
if(hashSize > n){
answer = n;
} else {
answer = hashSize;
}
return answer;
}
}
다른사람 코드 1
이외에도 자바에서 배열의 중복값을 제거하는 방법이 더 있어서 정리해보았다.
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
int size = (nums.length) / 2;
ArrayList<Integer> kind_list = new ArrayList<>();
for(int data : nums){
if(!kind_list.contains(data)){
kind_list.add(data);
}
}
int cnt = kind_list.size();
if(size < cnt){
answer = size;
}
else{
answer = cnt;
}
return answer;
}
}
ArrayList를 사용한 방법으로 contains 함수를 사용해 배열 nums에 포함 되지 않은 숫자 일때 리스트에 숫자를 add한다.
다른사람 코드 2
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] nums) {
/**
* nums 배열을 받아 Arrays.stream(nums).boxed로 스트림을 생성한뒤,
* Collectors.collectingAndThen로 Set으로 만들고,
* phonekemons로 Set을 입력받아 phonkemons Set의 사이즈와 num.length/2의 최소값을 구해서,
* Set의 int값 return
**/
return Arrays.stream(nums)
.boxed()
.collect(Collectors.collectingAndThen(Collectors.toSet(),
phonekemons -> Integer.min(phonekemons.size(), nums.length / 2)));
}
}
다른 사람 풀이보면 꼭 Arrays, stream.Collectors로 간단하게 해결하는 사람들 많더라..
사용할 줄 몰라서 항상 신기해만 함^^.. 날 잡고 공부해봐야지
이 코드에서 사용된 것만 간단히 보자면 boxed()는 Integer타입을 stream으로 변환 해주고
CollectingAndThen 메서드는 Collecting을 진행한 후 그 결과로 메서드를 하나 더 호출 할 수 있게 해준다고 한다.
여기서 toSet() 메소드를 통해 Set타입의 스트림을 생성하고 (Set타입은 중복되는 요소가 사라진다) 중복제거된 nums(=phonekemons) 의 크기와 원래의 nums.length/2 를 비교해 min() 함수로 더 작은 int값을 반환한다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Java] LV.1 정수 제곱근 판별 (0) | 2022.09.14 |
---|---|
[프로그래머스/Java] LV.1 자릿수 더하기 (0) | 2022.09.13 |
[프로그래머스/Java] LV.1 나머지가 1이 되는 수 찾기 (0) | 2022.09.13 |
[프로그래머스/Java] LV.1 완주하지 못한 선수 (0) | 2022.08.16 |
[프로그래머스/Java] LV.1 소수 만들기 (0) | 2022.08.12 |