java - 두배열 합치기(Two pointer)
728x90
import java.util.ArrayList;
import java.util.Scanner;
public class CombineTwoArrays {
public static ArrayList<Integer> solution(int[] arr1, int[] arr2) {
int p1 = 0, p2 = 0;
ArrayList<Integer> answer = new ArrayList<>();
while (p1 < arr1.length && p2 < arr2.length) {
if (arr1[p1] < arr2[p2]) answer.add(arr1[p1++]);
else answer.add(arr2[p2++]);
}
for (int i=p1; i<arr1.length; i++) {
answer.add(arr1[p1]);
}
for (int i=p2; i< arr2.length; i++) {
answer.add(arr2[i]);
}
return answer;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr1 = new int[n];
for (int i=0; i<n; i++) {
arr1[i] = in.nextInt();
}
n = in.nextInt();
int[] arr2 = new int[n];
for (int i=0; i<n; i++) {
arr2[i] = in.nextInt();
}
for (int x: solution(arr1, arr2)) {
System.out.printf("%d ", x);
}
System.out.println();
}
}
문제해결
- 2개의 배열의 첫번째 index 부터 가르키는 pointer p1, p2를 변수로 선언하고 0으로 초기화 합니다.
- arr1[p1] 의 값이 arr2[p2] 값 보다 작을때 arr1[p1]의 값을 answer 의 동적배열에 추가하고 p1의 값을 1증가 시킵니다.
- arr1[p1] 의 값이 arr2[p2] 와 같거나 클때는 arr2[p2]의 값을 answer 의 동적배열에 추가하고 p2의 값을 1증가 시킵니다.
- while 문이 p1 또는 p2가 각각 의 배열의 길이와 같아 질때 종료 됩니다.
- 어떤 배열이 더 긴지 알수 없으므로 arr1 과 arr2 의 뒤의 남은 부분을 answer 에 추가합니다.
728x90
'Java > java - algorithm' 카테고리의 다른 글
java - 연속된 자연수의 합 (투포인터) (0) | 2021.07.29 |
---|---|
java - 최대 매출(슬라이딩 윈도우) (0) | 2021.07.29 |
java - 임시반장 정하기(배열) (0) | 2021.07.26 |
java - 격자판 최대합 (배열) (0) | 2021.07.25 |
java - 숫자만 추출(아스키 코드) (0) | 2021.07.18 |
댓글
이 글 공유하기
다른 글
-
java - 연속된 자연수의 합 (투포인터)
java - 연속된 자연수의 합 (투포인터)
2021.07.29 -
java - 최대 매출(슬라이딩 윈도우)
java - 최대 매출(슬라이딩 윈도우)
2021.07.29 -
java - 임시반장 정하기(배열)
java - 임시반장 정하기(배열)
2021.07.26 -
java - 격자판 최대합 (배열)
java - 격자판 최대합 (배열)
2021.07.25