문제
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
▣ 입력설명
첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.
각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.
▣ 출력설명
오름차순으로 정렬된 배열을 출력합니다.
▣ 입력예제 1
3
1 3 5
5
2 3 6 7 9
▣ 출력예제 1
1 2 3 3 5 6 7 9
풀이
두 배열을 입력받은 뒤 Arrays.sort 메서드를 사용해 오름차순 정렬을 하고
기준이 되는 Two pointer p1, p2를 두고 두 배열을 비교해가며 작은 값을 answer 배열에 넣는다.
그냥 두 배열을 처음부터 합쳐서 오름차순 정렬을 하면 안되나 싶어서 찾아봤더니 다음과 같은 방법이 있다.
- 반복문으로 여러 배열을 하나로 병합
- Commons-lang3 라이브러리로 배열 병합
- Stream으로 여러 배열을 하나로 합치기
이 블로그를 참고하면 좋을 것 같다. https://codechacha.com/ko/java-join-arrays/
코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr1 = new int[n];
for(int i=0; i<n; i++) {
arr1[i] = in.nextInt();
}
int m = in.nextInt();
int[] arr2 = new int[m];
for(int i=0; i<m; i++) {
arr2[i] = in.nextInt();
}
Arrays.sort(arr1);
Arrays.sort(arr2);
List<Integer> answer = new ArrayList<>();
//arr1과 arr2 비교
int p1=0, p2=0;
while(p1 < n && p2 < m) {
if(arr1[p1] <= arr2[p2]) answer.add(arr1[p1++]);
else answer.add(arr2[p2++]);
}
//길이가 긴 배열의 나머지를 추가
while(p1 < n) answer.add(arr1[p1++]);
while(p2 < m) answer.add(arr2[p2++]);
for(int x : answer) {
System.out.print(x + " ");
}
}
}
'PS(Java) > 인프런 강의 문제' 카테고리의 다른 글
[PS] 인프런 강의 - Two Pointers, Sliding window, Math 3. 최대 매출 (0) | 2022.10.23 |
---|---|
[PS] 인프런 강의 - Two Pointers, Sliding window, Math 2. 공통원소 구하기 (0) | 2022.10.23 |
[PS] 인프런 강의 - Arrays 12. 멘토링 (0) | 2022.10.21 |
[PS] 인프런 강의 - Array 11. 임시반장 정하기 (0) | 2022.10.20 |
[PS] 인프런 강의 - Array 10. 봉우리 (0) | 2022.10.20 |