알고리즘 자료구조/백준
[백준] P. 11728 배열 합치기(JAVA)
yes_truly
2024. 3. 27. 16:05
728x90
https://www.acmicpc.net/problem/11728
🖊️문제
정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.
🖊️입력
첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)
둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다.
🖊️출력
첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다.
🖊️문제 풀이
먼저 투 포인터를 이용한 방법으로 문제를 풀어봤다.
p1, p2로 배열 A, B 값을 확인하면서 두 배열을 합쳐주는 방법이다.
A[p1] < B[p2]면 A[p1]을 출력하고 p1++을, 반대의 경우에는 B[p2]를 추가하고 p2++을 해준다.
p1이나 p2 중에서 배열 전체까지 다 도달하지 못한 경우에 도달하지 못한 부분을 추가적으로 출력해주면 된다.
다음으로는 그냥 간단하게 A, B 배열을 나눠서 입력받지 말고 아예 배열 하나에 데이터를 입력받고 정렬해주는 방법이다.
솔직히 이게 제일 최고 간단ㅎㅎ...
🖊️코드
package 투포인터;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class P11728 {
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];
StringBuilder sb = new StringBuilder();
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());
}
int p1 = 0;
int p2 = 0;
while (p1 < n && p2<m){
if(a[p1] > b[p2]){
sb.append(b[p2]+" ");
p2++;
}else{
sb.append(a[p1]+" ");
p1++;
}
}
if(p1 == n){
for (int i = p2; i <m ; i++) {
sb.append(b[i]+" ");
}
}else{
for (int i = p1; i <n ; i++) {
sb.append(a[i]+" ");
}
}
System.out.println(sb);
}
}
투포인터 이용 코드!
package 투포인터;
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.StringTokenizer;
public class P11728_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] arr = new int[n+m];
st=new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
st=new StringTokenizer(br.readLine());
for (int i = n; i < n+m; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
for(int item : arr){
bw.write(item+" ");
}
bw.flush();
bw.close();
br.close();
}
}
Arrays.sort를 이용한 방법!
728x90