응애개발자
article thumbnail
728x90

문제

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

 

접근 방법

  1. 간단하게 Arrays.sort로 구하거나, PriorityQueue를 이욯하거나 해서 쉽게 구할 수 있었을 것이다.
  2. 하지만 투포인터 방법으로 구해보았다.
  3. 첫번째 배열에서 첫번째 항을 s 두번째 배열에서 첫번째 항을 e 로 두고 작은 부분을 Stringbuilder에 넣어주었다.
  4. 두 배열중 먼저 끝 지점에 다다를시 배열 하나는 탐색이 다 완료가 되지 않았다는 말로 해당 포인터 부터 나머지 값을 넣어준다.
  5. 근데 이 투포인터가 가능한 이유는 첫번째 배열과 두번째 배열이 모두 정렬이 되있기 때문에 가능한것이다. 만약 정렬되어 있지 않으면 불가능하다. (ex 첫번째 배열 1,4,2 두번째 배열 3)

코드

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

public class Main {
    private static StringBuilder sb;
    private static BufferedReader br;
    private static StringTokenizer st;
    private static int N,M;
    private static int[] arrA,arrB;

    //입력
    public static void input() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        arrA = new int[N];
        arrB = new int[M];

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

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

    //실행
    public static void process() {
        int s = 0;
        int e = 0;

        while (s<N && e<M){
            if(arrA[s] <= arrB[e]){
                sb.append(arrA[s]+" ");
                s++;
            }else{
                sb.append(arrB[e]+" ");
                e++;
            }
        }

        if(s==N){
            for(int i = e ; i < M; i++){
                sb.append(arrB[i]+" ");
            }
        }else{
            for(int i = s ; i < N ; i++){
                sb.append(arrA[i]+" ");
            }
        }
        
        //else 부분 이해를 돕기 위해 else말고 밑에 if절을 써도 된다.
//        if(e==M){
//            for(int i = s ; i < N ; i++){
//                sb.append(arrA[i]+" ");
//            }
//        }

        System.out.println(sb);
    }


    public static void main(String[] args) throws Exception {
        input();
        process();
    }
}
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!