1. 유형
구현, 정렬
2. 문제 분석
두 배열의 교집합을 구하는 문제였습니다.
요즘 Stream을 공부 중인데, for을 최소한으로 사용을 연습을 위해 풀어봤습니다.
3. 코드
static public int[] solution(int[] nums1, int[] nums2) {
List<Integer> list = new ArrayList<>();
Map<Integer, Integer> n = new HashMap<>();
Map<Integer, Integer> m = new HashMap<>();
Arrays.stream(nums1).forEach(x -> n.put(x, n.getOrDefault(x, 0) + 1));
Arrays.stream(nums2).forEach(x -> m.put(x, m.getOrDefault(x, 0) + 1));
for (int k : n.keySet()) {
if (m.containsKey(k)) {
int min = Math.min(n.get(k), m.get(k));
while (min-- > 0) {
list.add(k);
}
}
}
int answer[] = list.stream().mapToInt(x -> x).toArray();
return answer;
}
4. 배운점
list -> Array로 변환
List의 타입은 Integer입니다. 그래서 Array로 변환하기 위해서 스트림에서 mapToInt라이브러리로 int로 변환시켜야 합니다. 그리고 toArray로 배열 리턴.
배열 탐색
forEach로 람다식 사용해서, Map초기화해주기.
'알고리즘 > 리트코드' 카테고리의 다른 글
329. Longest Increasing Path in a Matrix (0) | 2021.04.10 |
---|---|
581. Shortest Unsorted Continuous Subarray (0) | 2021.04.10 |
621. Task Scheduler (0) | 2021.04.10 |
리트코드 - 데일리과제(3/30) Russian Doll Envelopes (0) | 2021.03.30 |
리트코드 데일리과제(3/27) - palindromic-substrings (0) | 2021.03.27 |