[Inflearn] 두 배열 합치기
인프런의 자바(Java)알고리즘 문제풀이 입문:코딩테스트 대비 강좌의 문제를 풀고 문제 해설을 작성해보았습니다.
섹션 3. Two pointers, Sliding window[효율성 : O(n^2)-->O(n)]의 1. 두 배열 합치기(two pointers algorithm) 강의편 입니다.
설명
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.
각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.
출력
오름차순으로 정렬된 배열을 출력합니다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class 두_배열_합치기 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int [] num1Arr = new int[num1];
for(int i = 0; i < num1; i++) {
num1Arr[i] = sc.nextInt();
}
int num2 = sc.nextInt();
int [] num2Arr = new int[num2];
for(int i = 0; i < num2; i++) {
num2Arr[i] = sc.nextInt();
}
for (int n : solution(num1,num1Arr,num2,num2Arr)) {
System.out.print(n + " ");
}
}
public static ArrayList<Integer> solution(int num1, int[] num1Arr, int num2, int[] num2Arr) {
ArrayList<Integer> list = new ArrayList<Integer>();
for(int n1 : num1Arr) {
list.add(n1);
}
for(int n2 : num2Arr) {
list.add(n2);
}
Collections.sort(list);
return list;
}
}
>> 해설
[main 메소드]
첫 번째 배열 크기를 정수형 변수 num1에 입력
num1 크기 만한 정수형 배열 num1Arr을 선언
반복문을 돌면서 num1Arr에 정수 저장.
두 번째 배열 크기를 정수형 변수 num2에 입력
num2 크기 만한 정수형 배열 num2Arr을 선언
반복문을 돌면서 num2Arr에 정수 저장.
[solution 메소드]
Integer 제너릭스 타입의 ArrayList를 선언
첫 번째 배열 num1Arr을 for-each 반복문을 돌면서 list에 추가
두 번째 배열 num2Arr을 for-each 반복문을 돌면서 list에 추가
Collections 클래스의 sort메소드를 이용하여 리스트 값 오름차순 정렬
main 메소드로 리스트 리턴