https://www.acmicpc.net/problem/11728
아주 간단한 문제였다.
두 배열을 각각 받고 오름차순인 하나의 배열로 합쳐서 출력한다.
더 최적화를 하고 싶다면 병합정렬을 사용해서 A,B 각각의 작은 순서로 배열에 저장한다.
이후 각 원소 사이에 " "를 추가해서 더해준다.
import java.util.*;
import java.io.*;
public class _11728 {
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());
ArrayList<Integer> sumList = new ArrayList<>();
// A 배열 입력
st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++){
sumList.add(Integer.parseInt(st.nextToken()));
}
// B 배열 입력
st = new StringTokenizer(br.readLine());
for(int i=0; i<m; i++){
sumList.add(Integer.parseInt(st.nextToken()));
}
Collections.sort(sumList);
StringBuilder sb = new StringBuilder();
for(int num: sumList){
sb.append(num+" ");
}
System.out.println(sb.toString());
}
}
좀 더 최적화를 해보고 싶어서 고민해봤는데
원래는 sumList에 모두 추가하고 한 번에 정렬한 뒤에 StringBuilder에 추가한다면
병합정렬을 사용해서 두 배열을 각각 크기순서대로 배열에 저장하고 출력한다면
좋을 것 같았다.
import java.util.*;
import java.io.*;
public class _11728 {
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());
// A 배열 입력
int[] A = new int[n+1];
st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++){
A[i] = Integer.parseInt(st.nextToken());
}
A[n] = Integer.MAX_VALUE;
// B 배열 입력
int[] B = new int[m+1];
st = new StringTokenizer(br.readLine());
for(int i=0; i<m; i++){
B[i] = Integer.parseInt(st.nextToken());
}
B[m] = Integer.MAX_VALUE;
// A,B 배열 병합정렬로 합치기
int a_index = 0;
int b_index = 0;
StringBuilder sb = new StringBuilder();
for(int i=0;i<n+m;i++){
if(A[a_index] <= B[b_index]){
sb.append(A[a_index++]+" ");
}
else{
sb.append(B[b_index++]+" ");
}
}
// 결과 출력
System.out.println(sb.toString());
}
}
대략 200ms정도 단축했다!!