Computer Science/Algorithm

[Inflearn] 두 배열 합치기

코딩맛 2023. 2. 7. 00:36

인프런의 자바(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 메소드로 리스트 리턴