백준/투 포인터

[투 포인터] 백준 11728번 배열 합치기 - Java

킴준현 2025. 4. 5. 20:21

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

 

✅ 문제

🔑 풀이

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

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

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

        int pointer_A = 0;
        int pointer_B = 0;
        while (pointer_A < N && pointer_B < M) { // A,B 배열을 비교해서 작은 수 출력해가기
            if (A[pointer_A] > B[pointer_B]) { // A 배열에 있는 수가 B 배열에 있는 수보다 클 때
                bw.write(B[pointer_B] + " "); // B 배열에 있는 수 출력
                pointer_B++;
            } else {
                bw.write(A[pointer_A] + " ");
                pointer_A++;
            }
        }

        if (pointer_A == N) { // A 배열이 출력되었을 때, B 배열 나머지 출력하기
            for (int i = pointer_B; i < M; i++) {
                bw.write(B[i] + " ");
            }
        }

        if (pointer_B == M) { // B 배열이 출력되었을 때, A 배열 나머지 출력하기
            for (int i = pointer_A; i < N; i++) {
                bw.write(A[i] + " ");
            }
        }
        bw.flush();
        bw.close();
    }
}

풀이 제출 후 시간 초과가 나서, 빠르게 출력해주는 BufferedWriter를 사용했다.