알고리즘 자료구조/백준

[백준] P. 11728 배열 합치기(JAVA)

yes_truly 2024. 3. 27. 16:05
728x90

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

 

11728번: 배열 합치기

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

www.acmicpc.net

 

🖊️문제

정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.

 

🖊️입력

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)

둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다.

 

🖊️출력

첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다.

 

🖊️문제 풀이

먼저 투 포인터를 이용한 방법으로 문제를 풀어봤다.

p1, p2로 배열 A, B 값을 확인하면서 두 배열을 합쳐주는 방법이다.

A[p1] <  B[p2]면 A[p1]을 출력하고 p1++을, 반대의 경우에는 B[p2]를 추가하고 p2++을 해준다.

p1이나 p2 중에서 배열 전체까지 다 도달하지 못한 경우에 도달하지 못한 부분을 추가적으로 출력해주면 된다.

 

다음으로는 그냥 간단하게 A, B 배열을 나눠서 입력받지 말고 아예 배열 하나에 데이터를 입력받고 정렬해주는 방법이다.

솔직히 이게 제일 최고 간단ㅎㅎ...

 

 

🖊️코드

package 투포인터;

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

public class P11728 {

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    int n = Integer.parseInt(st.nextToken());
    int m = Integer.parseInt(st.nextToken());
    int a[] = new int[n];
    int b[] = new int[m];
   StringBuilder sb = new StringBuilder();


    st = new StringTokenizer(br.readLine());
    for (int i = 0; i < n; i++) {
      a[i] = Integer.parseInt(st.nextToken());
    }
    st = new StringTokenizer(br.readLine());
    for (int i = 0; i < m; i++) {
      b[i] = Integer.parseInt(st.nextToken());
    }

    int p1 = 0;
    int p2 = 0;

    while (p1 < n && p2<m){
      if(a[p1] > b[p2]){
        sb.append(b[p2]+" ");
        p2++;
      }else{
        sb.append(a[p1]+" ");
        p1++;
      }
    }
    if(p1 == n){
      for (int i = p2; i <m ; i++) {
        sb.append(b[i]+" ");
      }
    }else{
      for (int i = p1; i <n ; i++) {
        sb.append(a[i]+" ");
      }
    }
    System.out.println(sb);
  }

}

투포인터 이용 코드!

 

 

package 투포인터;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class P11728_2 {

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

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

    Arrays.sort(arr);
    for(int item : arr){
      bw.write(item+" ");
    }

    bw.flush();
    bw.close();
    br.close();
  }

}

Arrays.sort를 이용한 방법!

728x90