728x90

 

import java.util.ArrayList;
import java.util.Scanner;

public class CombineTwoArrays {
    public static ArrayList<Integer> solution(int[] arr1, int[] arr2) {
        int p1 = 0, p2 = 0;
        ArrayList<Integer> answer = new ArrayList<>();
        while (p1 < arr1.length && p2 < arr2.length) {
            if (arr1[p1] < arr2[p2]) answer.add(arr1[p1++]);
            else answer.add(arr2[p2++]);
        }

        for (int i=p1; i<arr1.length; i++) {
            answer.add(arr1[p1]);
        }
        for (int i=p2; i< arr2.length; i++) {
            answer.add(arr2[i]);
        }
        return answer;
    }
    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();
        }
        n = in.nextInt();
        int[] arr2 = new int[n];
        for (int i=0; i<n; i++) {
            arr2[i] = in.nextInt();
        }
        for (int x: solution(arr1, arr2)) {
            System.out.printf("%d ", x);
        }
        System.out.println();
    }
}

 

문제해결

 

  1. 2개의 배열의 첫번째 index 부터 가르키는 pointer p1, p2를 변수로 선언하고 0으로 초기화 합니다.
  2. arr1[p1] 의 값이 arr2[p2] 값 보다 작을때 arr1[p1]의 값을 answer 의 동적배열에 추가하고 p1의 값을 1증가 시킵니다.
  3. arr1[p1] 의 값이 arr2[p2] 와 같거나 클때는 arr2[p2]의 값을 answer 의 동적배열에 추가하고 p2의 값을 1증가 시킵니다.
  4. while 문이 p1 또는 p2가 각각 의 배열의 길이와 같아 질때 종료 됩니다.
  5. 어떤 배열이 더 긴지 알수 없으므로 arr1 과 arr2 의 뒤의 남은 부분을 answer 에 추가합니다.
728x90