ALGORITHM

[JAVA] 알고리즘 : two pointers - 두 배열 합치기

연듀 2022. 6. 20. 16:02

import java.io.*;
import java.util.*;

public class Main {
    public ArrayList<Integer> solution(int n, int m, int[] a, int[] b){
        ArrayList<Integer> answer = new ArrayList<>();
        int p1=0, p2=0;
        while(p1<n && p2<m){ // p1과 p2가 각각 n과 m보다 작을 때
            if(a[p1]<b[p2]) answer.add(a[p1++]); // p1이 p2보다 작으면 answer에 추가 그 뒤 p1증가
            else answer.add(b[p2++]); // p2가 p1보다 작으면 p2추가
        }

        while(p1<n) answer.add(a[p1++]); // p1이 남아있다면 남아있는 a배열 추가
        while(p2<m) answer.add(b[p2++]); // p2가 남아있다면 남아있는 b배열 추가

        return answer;
    }
    public static void main(String[] args) throws IOException {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[] a = new int[n];
        for(int i=0; i<n; i++){
            a[i]=kb.nextInt();
        }

        int m = kb.nextInt();
        int[] b = new int[m];
        for(int i=0; i<m; i++){
            b[i]=kb.nextInt();
        }

        for(int x: T.solution(n,m,a,b)) System.out.print(x+" ");
    }

}