알고리즘
백준 11728번 배열 합치기
박카스마시며코딩
2021. 12. 3. 13:45
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의 값이 정렬되있다는 것을 보고 각각의 배열의 포인터를 통해 작은 값을 계속 출력하면 되겠다고 생각하였습니다.
package BOJ;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_11728 {
static int n, m;
static int input[][];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
Function<String, Integer> stoi = Integer::parseInt;
n = stoi.apply(st.nextToken());
m = stoi.apply(st.nextToken());
st = new StringTokenizer(br.readLine(), " ");
input = new int[2][];
input[0] = new int[n];
input[1] = new int[m];
for (int i = 0; i < n; i++) {
input[0][i] = stoi.apply(st.nextToken());
}
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < m; i++) {
input[1][i] = stoi.apply(st.nextToken());
}
int si1 = 0;
int si2 = 0;
StringBuilder sb = new StringBuilder();
while(si1 < n || si2 < m){
if(si1 == n){
// System.out.print(input[1][si2++]);
sb.append(input[1][si2++]);
} else if(si2 == m){
// System.out.print(input[0][si1++]);
sb.append(input[0][si1++]);
} else if(input[0][si1] < input[1][si2]){
// System.out.print(input[0][si1++]);
sb.append(input[0][si1++]);
}else{
// System.out.print(input[1][si2++]);
sb.append(input[1][si2++]);
}
// System.out.print(" ");
sb.append(" ");
// System.out.printf("%d %d %d %d \n", si1,si2,n,m);
}
System.out.println(sb.toString());
}
}