코딩테스트/백준

[백준 - 11728] 배열 합치기 .java

머밍 2025. 5. 21. 22:32

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

 

Arrays.sort

바로 정렬

대신, 입력과 출력의 시간초과를 방지하기 위해 BufferedReader와 BufferedWriter를 사용함

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.Scanner;
import java.util.StringTokenizer;


public class Main {


    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[] nums = new int[n+m];
    	st = new StringTokenizer(br.readLine());
    	
    	for(int i=0;i<n;i++) {
    		nums[i]=Integer.parseInt(st.nextToken());
    	}
    	st = new StringTokenizer(br.readLine());
    	
    	for(int i=n;i<nums.length;i++) {
    		nums[i]=Integer.parseInt(st.nextToken());
    	}
    	
    	Arrays.sort(nums);
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    	for(int i = 0;i<nums.length;i++) {
    		bw.write(nums[i]+" ");
    	}
    	
    	bw.flush();
    	
     }
    
}

 

 

투포인터 

  • 입력받은 a,b 배열 모두 이미 정렬된 상태

-> 투포인터로 접근하자!

 

더 작은 값을 결과 배열에 차례대로 넣고 한쪽을 모두 다 넣었다면 남은 한쪽의 배열을 차례대로 넣으면 된다

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.Scanner;
import java.util.StringTokenizer;


public class Main {
    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];
    	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());
    	}
    	//각 배열 a와 b의 현재 인덱스를 나타내는 포인터
    	int ap=0, bp=0;
    	int index =0;//결과 배열의 인덱스 
    	int[] answer = new int[n+m];
        
        //배열 a와 b의 원소를 하나씩 비교하여 작은 값을 answer 배열에 넣기
    	while(ap<n && bp <m) {
    		if(a[ap] < b[bp]) {
    			answer[index++] = a[ap++];
    		}
    		else answer[index++] =b[bp++];
    	}
    	//남은 값들을 처리
    	while(ap<n) answer[index++] = a[ap++];
    	while(bp<m) answer[index++]= b[bp++];
    	
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    	
    	for(int i=0;i<answer.length;i++ ) {
    		bw.write(answer[i]+" ");
    	}
    	
    	
    	bw.flush();
    	
     }
    
}