알고리즘/백준

백준-11728번/배열 합치기 (java)

연향동큰손 2024. 10. 7. 12:52

문제 이해

 

두 배열을 크기 순서대로 합치는 문제이다.

 

두 배열에 대한 포인터를 두 개 선언해서 풀면 간단하게 풀 수 있다.

 

한 배열에 대한 포인터가 배열의 범위를 벗어나면 다른 배열에는 이전에 넣었던 값보다 더 큰 값만 남기 때문에 나머지 배열의 요소를 그대로 출력하면 된다.

 

 

문제 해결

 

1. 두 배열에 대한 포인터 선언

int p1=0;
int p2=0;

 

 

2. 포인터를 이용하여 배열의 대소를 비교하여 작은 값을 출력

while(p1<N &&p2<M){
    if(arr[p1]<=arr2[p2]){
        sb.append(arr[p1++]+" ");
    }
    else{
        sb.append(arr2[p2++]+" ");
    }
}

 

 

3. 아직 출력하지 못한 부분이 있는 배열을 출력

if(p1==arr.length){
    for(int j=p2; j<M; j++){
        sb.append(arr2[j]+" ");
    }
}
else if(p2==arr2.length){
    for(int j=p1; j<N; j++){
        sb.append(arr[j]+" ");
    }
}

 

 

 

<전체 코드>

import java.io.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Problem11728 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int[] arr = new int[N];
        int[] arr2 = new int[M];

        st = new StringTokenizer(br.readLine());
        for(int i =0; i<N; i++){
            arr[i]=Integer.parseInt(st.nextToken());
        }
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<M; i++){
            arr2[i]=Integer.parseInt(st.nextToken());
        }

        int p1=0;
        int p2=0;

        while(p1<N &&p2<M){
            if(arr[p1]<=arr2[p2]){
                sb.append(arr[p1++]+" ");
            }
            else{
                sb.append(arr2[p2++]+" ");
            }
        }

        if(p1==arr.length){
            for(int j=p2; j<M; j++){
                sb.append(arr2[j]+" ");
            }
        }
        else if(p2==arr2.length){
            for(int j=p1; j<N; j++){
                sb.append(arr[j]+" ");
            }
        }

        System.out.println(sb);

    }
}