본문 바로가기
Algorithm

[백준 Silver 5] 11728 배열 합치기 - Java

by Ray 2022. 1. 12.

문제링크 : https://www.acmicpc.net/problem/11728

 

11728번: 배열 합치기

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거

www.acmicpc.net

 

접근 과정 : 

  • 문제 그대로 접근하려고 했다.
  • 하나의 컬렉션으로 합쳐서 입력을 받지 않고, 배열 2개로 나눠서 입력을 받았다.
  • 그리고 포인터를 각 배열에 하나씩 주고, A[i] 와 B[j] 를 비교해가면서 출력했다.

 

소스 코드 및 결과 :

package BOJ;

/* 
    배열 합치기
*/

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

public class BOJ11728 {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int lenA = Integer.parseInt(st.nextToken());
        int lenB = Integer.parseInt(st.nextToken());

        int[] A = new int[lenA];
        int[] B = new int[lenB];

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

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

        StringBuilder sb = new StringBuilder();

        int a = 0;
        int b = 0;

        while (a < lenA || b < lenB) {

            if (a == lenA) {
                sb.append(B[b]).append(" ");
                b++;
                continue;
            }

            if (b == lenB) {
                sb.append(A[a]).append(" ");
                a++;
                continue;
            }

            if (A[a] <= B[b]) {
                sb.append(A[a]).append(" ");
                a++;
            } else {
                sb.append(B[b]).append(" ");
                b++;
            }
        }

        System.out.println(sb.toString().trim());

    }
}