Java/BOJ

[BOJ] 백준 11728. 배열 합치기

동구름이 2024. 5. 15. 11:12

문제

https://www.acmicpc.net/problem/11728

 

 


풀이

두 가지 방법으로 문제를 해결할 수 있었습니다. Arrays.sort 메서드를 통해 단순히 구현하는 법과 포인터를 이용하는 법입니다.

 

포인터를 이용할 때에는, 두 배열에 대해 0부터 시작하는 포인터를 하나씩 두고, 둘 중 하나라도 포인터가 끝에 도달하면 while문을 멈춥니다. 그리고 끝까지 도달한 배열이 아닌, 다른 배열의 값을 모두 append 해주었습니다.

 

아래는 소스 코드입니다.


소스 코드

1. pointer 이용

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
        int[] A = new int[N];
        int[] B = new int[M];
        for(int i = 0;i<N;i++){
            A[i] = sc.nextInt();
        }
        for(int i = 0;i<M;i++){
            B[i] = sc.nextInt();
        }
        Arrays.sort(A);
        Arrays.sort(B);

        int pointA = 0;
        int pointB = 0;

        StringBuilder sb = new StringBuilder();

        while(pointA<N&&pointB<M){
            if(A[pointA]<=B[pointB]){
                sb.append(A[pointA]+" ");
                pointA++;
            }
            else if(A[pointA]>B[pointB]){
                sb.append(B[pointB]+" ");
                pointB++;
            }
        }
        if(pointA==N){
            while(pointB<M){
                sb.append(B[pointB++]+" ");
            }
        }
        if(pointB==M){
            while(pointA<N){
                sb.append(A[pointA++]+" ");
            }
        }

        System.out.println(sb);
    }
}

 

2. Arrays.sort 이용

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
        int[] AB = new int[N+M];
        for(int i = 0;i<N;i++){
            AB[i] = sc.nextInt();
        }
        for(int i = N;i<N+M;i++){
            AB[i] = sc.nextInt();
        }
        Arrays.sort(AB);
        StringBuilder sb = new StringBuilder();
        for(int i : AB){
            sb.append(i+" ");
        }
        System.out.println(sb);
    }
}