[백준] 11728번 : 배열 합치기 (JAVA)

2026. 3. 13. 16:20·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

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


📌 문제 개요

정렬된 두 배열 A와 B가 주어질 때, 두 배열을 합쳐 정렬된 상태로 출력하는 문제

A = 1 4 7  
B = 2 3 6

 

이라면 결과는 1 2 3 4 6 7 처럼 두 배열을 합친 후 정렬된 상태로 출력해야 한다.


📌 접근 방법

처음에는 두 배열을 하나의 배열로 합친 후 Arrays.sort()로 정렬하는 방법도 생각할 수 있다.

하지만 이 문제는 이미 두 배열이 각각 정렬된 상태이기 때문에
다시 정렬할 필요 없이 Merge 방식으로 해결할 수 있다.

 

Merge 방식은 두 포인터를 사용하여 두 배열의 현재 값을 비교하면서 작은 값을 순서대로 결과에 넣는 방법


📌 핵심 아이디어

  1. 배열 A와 B를 각각 입력받는다.
  2. 두 배열의 현재 위치를 가리키는 포인터 i, j를 만든다.
  3. A[i]와 B[j]를 비교하여 작은 값을 결과에 추가한다.
  4. 해당 포인터를 증가시킨다.
  5. 한 배열이 끝나면 다른 배열의 남은 요소들을 모두 추가한다.
  6. 결과는 StringBuilder에 저장한 뒤 한번에 출력한다.

시간복잡도는 O(A + B) 이다.


📌 전체 코드

package no_11728;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class No11728 {

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

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

        int[] A = new int[Integer.parseInt(st.nextToken())];
        int[] B = new int[Integer.parseInt(st.nextToken())];

        StringTokenizer st1 = new StringTokenizer(br.readLine());

        for(int i = 0; i < A.length; i++){
            A[i] = Integer.parseInt(st1.nextToken());
        }

        StringTokenizer st2 = new StringTokenizer(br.readLine());

        for(int j = 0; j < B.length; j++){
            B[j] = Integer.parseInt(st2.nextToken());
        }

        StringBuilder sb = new StringBuilder();

        int i = 0;
        int j = 0;

        while(i < A.length && j < B.length){
            if(A[i] <= B[j]){
                sb.append(A[i++]).append(" ");
            }else{
                sb.append(B[j++]).append(" ");
            }
        }

        while(i < A.length){
            sb.append(A[i++]).append(" ");
        }

        while(j < B.length){
            sb.append(B[j++]).append(" ");
        }

        System.out.print(sb);
    }
}

📌 정리

이 문제의 핵심은 이미 정렬된 배열을 다시 정렬하지 않는 것이다.

Arrays.sort()를 사용하면 O(N log N)이 되지만,

 

Merge 방식(투포인터)을 사용하면 O(N) 으로 해결할 수 있다.

728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

[백준] 2846번 : 오르막길 (JAVA)  (0) 2026.03.16
[백준] 10798번 : 세로읽기 (JAVA)  (0) 2026.03.14
[백준] 2309번 : 일곱 난쟁이 (JAVA)  (0) 2026.03.12
[백준] 1417번 : 국회의원 선거 (JAVA)  (0) 2026.03.11
[백준] 1384번 : 메시지 (JAVA)  (0) 2026.03.10
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • [백준] 2846번 : 오르막길 (JAVA)
  • [백준] 10798번 : 세로읽기 (JAVA)
  • [백준] 2309번 : 일곱 난쟁이 (JAVA)
  • [백준] 1417번 : 국회의원 선거 (JAVA)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    기출문제
    자바
    피보나치
    백준
    실기
    java
    dp
    시뮬레이션
    수학
    프로그래머스
    정보처리기사 실기 기출문제
    알고리즘
    코딩테스트
    정처기실기
    배열
    문자열
    level0
    정렬
    Level2
    level1
    정보처리기사
    구현
    정처기
    springboot
    정처기오답노트
    완전탐색
    브루트포스
    백엔드개발자
    자료구조
    solved.ac
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
[백준] 11728번 : 배열 합치기 (JAVA)
상단으로

티스토리툴바