코딩테스트/백준
[백준 - 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();
}
}