https://programmers.co.kr/learn/courses/30/lessons/1845
내가 푼 방법
nums 배열 속 숫자의 중복을 제거하여 폰켓몬이 몇 종류가 있는지 파악한다.
가질 수 있는 폰켓몬 수 = nums.length / 2
폰켓몬 종류 > 가질 수 있는 수 -> return 가질 수 있는 폰켓몬 수
폰켓몬 종류 <= 가질 수 있는 수 -> return 폰켓몬의 종류
코드
import java.util.ArrayList;
class Solution {
public int solution(int[] nums) {
int answer = 0;
int have = nums.length / 2;
ArrayList<Integer> arrayList = new ArrayList<>();
for(int phonekemon : nums){
if(!arrayList.contains(phonekemon))
arrayList.add(phonekemon);
} // 중복 제거해서 arrayList에 넣기
if(arrayList.size() > have) answer = have;
else answer = arrayList.size();
return answer;
}
}
ArrayList를 사용하여 중복을 제거했다.
배열의 중복을 제거하는 법
위에서 사용한 방법처럼 ArrayList나 List를 사용할 수 있다.
참고 ArrayList와 list의 차이 : https://com-on-bappool.tistory.com/50
1. ArrayList 사용
- arrayList에 넣을 때 중복을 제거해서 넣기
for(int phonekemon : nums){
if(!arrayList.contains(phonekemon))
arrayList.add(phonekemon);
} // 중복 제거해서 arrayList에 넣기
2. Set 사용
1) HashSet 사용
import java.util.HashSet;
HashSet<int> hashSet = new HashSet<>();
for(int phonekemon : nums)
hashSet.add(phonekemon);
2) TreeSet 사용 : 오름차순 정렬됨
import java.util.TreeSet;
TreeSet<int> treeSet = new TreeSet<>();
for(int phonekemon : nums)
treeSet.add(phonekemon);
3) LinkedHashSet 사용 : 입력된 순서대로 정렬됨
import java.util.LinkedHashSet;
LinkedHashSet<int> linkedHashSet = new LinkedHashSet<>();
for(int phonekemon : nums)
linkedHashSet.add(phonekemon);
3. Stream 사용 (Java 8~)
// 배열 -> strem -> 중복제거 -> 배열(예시는 String)
String[] resultArray = Arrays.stream(array).distinct().toArray(String[]::new);
다른 사람의 코드
stream은 요소를 수집하는 collect()를 제공해 필요한 것만 담을 수 있다.
boxed() -> primitive 타입을 wrapper 타입으로 박싱하여 반환
CollectingAndThen 메서드로 Collecting을 진행한 후 그 결과로 메서드를 하나 더 호출
Collectors.toSet() -> stream요소를 set 인스턴스로 수집
폰켓몬 종류(phonekemons.size())와 가질 수 있는 개수(nums.length/2) 중에 작은걸 담는다.
내가 푼거랑 비슷한데 return 할 때를 간편하게 했음
종류랑 가질 수 있는것 중에 작은걸 출력!! 한다는 코드를 사용하는게 더 간편하다!
return (nums.length / 2 > list.size()) ? list.size() : nums.length / 2;
요렇게~~!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈 for JAVA (0) | 2021.12.18 |
---|---|
[프로그래머스] 실패율 for JAVA (0) | 2021.12.16 |
[프로그래머스] K번째수 for JAVA (0) | 2021.12.08 |
[프로그래머스] 소수 만들기 for JAVA (0) | 2021.11.26 |
[프로그래머스] 내적 for JAVA (0) | 2021.11.25 |