Competition/Baekjoon

[백준] 11728번 자바 배열 합치기

bisi 2020. 4. 2. 22:26
문제 출처 

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

 

11728번: 배열 합치기

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

www.acmicpc.net

 

 

 

접근 방식 및 풀이

- 분할 정복에서 이미 분할된 배열을 합치는 과정을 한다고 생각하면 된다. 

- 배열에 담아 순서대로 정렬한다. 

- 두배열의 원소를 서로 비교하여 작은것을 새로운 배열에 하나씩 담는다. 

- 어느 한쪽이 남은 것은 새로운 배열에 모두 담는다. (순서를 보장하기 때문에 그대로 담아준다.)

 

 

소스 코드 
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
        
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int asize = sc.nextInt();
        int bsize = sc.nextInt();
        int[] arra = new int[asize];
        int[] arrb = new int[bsize];
        int[] resultarr = new int[asize+bsize];
        for (int i = 0; i <asize ; i++) {
            arra[i] = sc.nextInt();
        }
        Arrays.sort(arra);
        for (int i = 0; i <bsize ; i++) {
            arrb[i] = sc.nextInt();
        }
        Arrays.sort(arrb);
        int i = 0;
        int j = 0;
        int k = 0;
        while (i< asize && j< bsize){
            if(arra[i] > arrb[j]){
                resultarr[k++]= arrb[j++];
            }else{
                resultarr[k++]= arra[i++];
            }
        }

        while(j<bsize){
            resultarr[k++] = arrb[j++];
        }
        while(i<asize){
            resultarr[k++] = arra[i++];
        }

        StringBuilder sb = new StringBuilder();

        for (int p = 0; p <resultarr.length ; p++) {
            sb.append(resultarr[p] + " ");
        }
        System.out.println(sb.toString());
    }
}

 

 

 

 

결과 

 

'Competition > Baekjoon' 카테고리의 다른 글

[백준] 11729번 하노이의 탑  (0) 2020.04.03
[백준] 1992번 자바 쿼드트리  (0) 2020.04.01
[백준] 2447번 자바 별찍기  (2) 2020.03.31