문제
풀이
🎨 쉬운 문제인데, 정렬로 문제를 풀면 시간복잡도가 커진다.
for(int x : T.solution(n,m,a,b)){
System.out.print(x +" ");
}
T.solution에 매개변수 n,m,a,b 를 넣으면 반환되는 값을 x로 출력한다.
ArrayList<Integer> answer = new ArrayList<>();
답을 저장할 ArrayList형식 정수형을 저장하는 변수 answer를 생성한다.
int p1=0, p2=0;
while(p1<n && p2<m){
if(a[p1]<b[p2]) answer.add(a[p1++]);
else answer.add(b[p2++]);
}
a의 포인터 p1, b의 포인터 p2를 0으로 설정 해준다.
a는 0~n-1까지의 인덱스가 있으므로, p1<n 일 때 까지, b는 0 ~ m-1까지 인덱스가 있으므로 p2<m 이 동시에 참일때만 while문이 돌게 만들어 준다.
a[p1]<b[p2] 가 참이면 p1을 add하고 ++해준다.
반대일 경우 p2를 add하고 ++해준다.
while(p1<n) answer.add(a[p1++]);
while(p2<m) answer.add(b[p2++]);
return answer;
나머지 부분을 출력해주면 끝!
소스코드
import java.util.*;
class Main {
public ArrayList<Integer> solution(int n, int m, int[] a, int[] b){
ArrayList<Integer> answer = new ArrayList<>();
int p1=0, p2=0;
while(p1<n && p2<m){
if(a[p1]<b[p2]) answer.add(a[p1++]);
else answer.add(b[p2++]);
}
while(p1<n) answer.add(a[p1++]);
while(p2<m) answer.add(b[p2++]);
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n=kb.nextInt();
int[] a=new int[n];
for(int i=0; i<n; i++){
a[i]=kb.nextInt();
}
int m=kb.nextInt();
int[] b=new int[m];
for(int i=0; i<m; i++){
b[i]=kb.nextInt();
}
for(int x : T.solution(n, m, a, b)) System.out.print(x+" ");
}
}