문제
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.
각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.
출력
오름차순으로 정렬된 배열을 출력합니다.
예시 입력
3
1 3 5
5
2 3 6 7 9
예시 출력
1 2 3 3 5 6 7 9
내 풀이
while문 사용
private static void combineArray1(int[] arr1, int[] arr2) {
int index1 = 0;
int index2 = 0;
while (true) {
if (arr1[index1] < arr2[index2]) {
System.out.print(arr1[index1++] + " ");
} else {
System.out.print(arr2[index2++] + " ");
}
if (index1 == arr1.length) { // arr1이 전부 출력되면
for (int i = index2; i < arr2.length; i++) { // 남은 arr2를 전부 출력
System.out.print(arr2[i] + " ");
}
break;
} else if (index2 == arr2.length) {
for (int i = index1; i < arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
break;
}
}
}
값을 비교해 가면서 한 쪽 배열이 다 출력되면 다른 한쪽을 전부 출력한다
Stream 사용
private static void combineArray2(int[] arr1, int[] arr2) {
int[][] arrays = {arr1, arr2};
Arrays.stream(arrays)
.flatMapToInt(Arrays::stream)
.sorted()
.forEach(n -> System.out.print(n + " "));
}
배열 요소들을 모아서 정렬한 뒤 출력한다
다른 풀이
/* 강의 풀이 */
public static ArrayList<Integer> solution(int length1, int length2, int[] arr1, int[] arr2) {
ArrayList<Integer> answer = new ArrayList<>();
int index1 = 0, index2 = 0;
// 한 배열이 다 출력되면 while문이 멈추게된다
while (index1 < length1 && index2 < length2) {
if (arr1[index1] < arr2[index2]) answer.add(arr1[index1++]);
else answer.add(arr2[index2++]);
}
// 다 출력된 쪽은 while문이 실행안됨
while (index1 < length1) answer.add(arr1[index1++]);
while (index2 < length2) answer.add(arr2[index2++]);
return answer;
}
'Java > Coding-Test' 카테고리의 다른 글
[Java] 3-3 최대 매출 (0) | 2022.01.20 |
---|---|
[Java] 3-2 공통원소 구하기 (0) | 2022.01.19 |
[Java] 2-12 멘토링 (0) | 2022.01.18 |
[Java] 2-11 임시반장 정하기 (0) | 2022.01.18 |
[Java] 2-10 봉우리 (0) | 2022.01.18 |
댓글