https://school.programmers.co.kr/learn/courses/30/lessons/1845
1. 가장 많은 종류의 폰켓몬을 선택하는 방법 찾기
2. return 값이 nums.length( )보다 크면 nums.length/2 아니면 구한 값
1. stack을 활용한 풀이
import java.util.Stack;
class Solution {
public int solution(int[] nums) {
Stack<Integer> stack = new Stack<>();
for(int i=0;i<nums.length;i++) {
if(!stack.contains(nums[i])) stack.push(nums[i]);
}
return stack.size() > nums.length/2 ? nums.length/2 : stack.size();
}
}
- 처음에 hash를 stack으로 잘못 생각하고 stack을 활용해서 풀었다.
- stack.contains( ) 특정 값이 존재하면 true 아니면 false
- 시간은 for문 때문인지 조금 오래 걸렸다.
2. ArrayList와 Hashset을 이용한 풀이
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
class Solution {
public int solution(int[] nums) {
int answer = 0;
ArrayList<Integer> list = new ArrayList<>();
for(int i : nums) list.add(i);
Set<Integer> set = new HashSet<>(list);
return answer = (set.size() > nums.length/2) ? nums.length/2 : set.size();
}
}
- Set을 활용하면 자동으로 중복되기 때문에 HashSet을 사용하였다.
- 1번보다 시간은 훨씬 빨라졌다.
- set은 추상 클래스이기 때문에 set 그자체로 쓸 수는 없어서 HashSet으로 사용했다.
- HashSet : Set을 구현하는 대표 클래스, 데이터 중복할 수 없고, 순서를 보장하지 않는다.
- TreeSet : HashSet 특성 + 오름차순으로 데이터를 정렬한다.
- LinkedHashSet :HashSet 특성 + 입력한 순서대로 데이터를 저장한다.
3. HashSet만 이용한 풀이
import java.util.HashSet;
class Solution {
public int solution(int[] nums) {
HashSet<Integer> hashset = new HashSet<>();
for(int i : nums) {
hashset.add(i);
}
return (nums.length/ 2 > hashset.size()) ? hashset.size() : nums.length/2;
}
}
- HashSet만으로도 풀이를 바로 할 수 있다..!
- 제일 시간이 빠르다!
+ 완주하지 못한 선수를 풀고 나서 HashMap으로 푼 풀이
import java.util.HashMap;
class Solution {
public int solution(int[] nums) {
HashMap<Integer, Integer> hmap = new HashMap<>();
for(int i : nums) hmap.put(i, hmap.getOrDefault(i, 0)+1);
return (hmap.size() > nums.length/2 ? nums.length/2 : hmap.size());
}
}
- getOrDefault로 굳이 할 필요 없다 왜냐면 size가 궁금한 거라서.. 그래서 hashSet으로 풀어도 상관없는 거였음!
'algorithm > Programmers' 카테고리의 다른 글
[JAVA] 전화번호 목록 (0) | 2023.03.29 |
---|---|
[JAVA] 완주하지 못한 선수 (0) | 2023.03.28 |
[JAVA]숨어있는 숫자의 덧셈 (2) (0) | 2023.03.25 |
[JAVA] 이진수 더하기 (0) | 2023.03.23 |
[JAVA] 잘라서 배열로 저장하기 (0) | 2023.03.23 |