문제 설명
정수로 이루어진 두 개의 배열 arr1, arr2가 주어집니다.
두 배열에 동시에 존재하는 숫자들을 모아서 배열로 출력하는 프로그램을 작성하세요.
출력 배열은 정수를 오름차순으로 정렬하여 반환하세요.
단, 같은 숫자가 arr1이나 arr2에 여러 개 있어도 출력 배열에는 하나만 포함시키세요.
입력 형식
· arr1, arr2 : 정수로 이루어진 배열
출력 형식
· 두 배열에 모두 존재하는 숫자로 이루어진 정수 배열
제약 사항
· 0 < arr1.length <= 100
· 0 < arr2.length <= 100
· 1 <= arr[i], arr[i] <= 100
입출력 예시
· 예시1
· 입력
· arr1 = {1, 7, 8, 4}
· arr2 = {2, 4, 6, 8}
· 출력 : {4, 8}
· 설명 : 두 배열 모두에 들어있는 숫자 4와 8로 이루어진, 오름차순으로 정렬된 배열을 출력한다.
· 예시2
· 입력
· arr1 = {9, 1, 1, 4, 1, 2, 3, 4}
· arr2 = {5, 6, 10, 12}
· 출력 : {}
· 설명 : 두 배열에 모두 들어있는 숫자가 없으므로, 빈 배열을 출력한다.
작성 코드
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
class Solution215 {
public int[] solution(int[] arr1, int[] arr2) {
Set<Integer> set = new HashSet<>();
Set<Integer> duplicates = new HashSet<>();
// Set은 중복을 허용하지 않는다.
// 중복되지 않은 숫자를 저장하기 위함
for (int i = 0; i < arr1.length; i++) {
set.add(arr1[i]);
}
// 두 배열에서 중복된 숫자를 저장하기 위함
// arr2 배열을 반복하면서 set에 arr2 배열의 각 숫자가 포함되어 있는지 확인한다.
for (int i = 0; i < arr2.length; i++) {
// 만약 set에 포함되어 있다면 duplicates에 해당 숫자를 추가한다.
if (set.contains(arr2[i])) {
duplicates.add(arr2[i]);
}
}
// duplicates에 저장된 중복된 숫자를 result 배열에 복사한다.
// 이 때, result 배열의 크기는 duplicates의 크기와 같아야 한다.
int[] result = new int[duplicates.size()];
int index = 0;
// num 변수에 duplicates의 각 숫자가 차례대로 저장되며,
// result[index++] = num; 구문에서 result 배열의 각 요소에 num을 할당하고
// index 값을 1 증가시킨다.
for (int num : duplicates) {
result[index++] = num;
}
Arrays.sort(result);
return result;
}
public static void main(String[] args) {
Solution215 st = new Solution215();
int[] arr1 = {1, 7, 8, 4};
int[] arr2 = {2, 4, 6, 8};
System.out.println(Arrays.toString(st.solution(arr1, arr2)));
int[] arr3 = {9, 1, 1, 4, 1, 2, 3, 4};
int[] arr4 = {5, 6, 10, 12};
System.out.println(Arrays.toString(st.solution(arr3, arr4)));
}
}
정답 코드
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] solution(int[] arr1, int[] arr2) {
Set<Integer> set = new HashSet<>();
for (int num1: arr1) {
for (int num2: arr2) {
if (num1 == num2) {
set.add(num1);
}
}
}
return set.stream()
.mapToInt(i->i)
.sorted()
.toArray();
}
public static void main(String[] args) {
Solution st = new Solution();
int[] arr1 = {1, 7, 8, 4};
int[] arr2 = {2, 4, 6, 8};
System.out.println(Arrays.toString(st.solution(arr1, arr2)));
int[] arr3 = {9, 1, 1, 4, 1, 2, 3, 4};
int[] arr4 = {5, 6, 10, 12};
System.out.println(Arrays.toString(st.solution(arr3, arr4)));
}
}
'연습 코딩테스트' 카테고리의 다른 글
연습문제 2-2(2) 정수 배열 요소 반복(홀수 1회) shift (0) | 2023.04.06 |
---|---|
연습문제 2-2(1) 전체 사용한 전기 요금 (0) | 2023.04.05 |
연습문제 2-1(4) 중복을 제외한 단어의 수 (0) | 2023.04.05 |
연습문제 2-1(3) 패턴 낱말 게임 (0) | 2023.04.05 |
연습문제 2-1(2) 평균 소득액 계산 (0) | 2023.04.05 |