Java 알고리즘 강의 내용이라 저작권 문제로 "문제"를 일부만 묘사합니다.
앞 숫자 보다 큰 숫자 출력
첫 숫자는 무조건 출력
IndexOutOfBounds 예외처리를 위해선 while문이 좋다.
while돌리다가 인덱스 넘어가면 while 문 나오기
-> 남은 처리 쉽게 하기
//* index 예외 처리는 while 문으로 하는 게 좋다.
answer.add(nums1[p1++]); //* p1을 넣고, p1 + 1 한다.
public ArrayList<Integer> solution(int n1, int[] nums1, int n2, int[] nums2) {
ArrayList<Integer> list = new ArrayList<>();
int p1 = 0;
int p2 = 0;
int j = 0;
for (int i = 0; i < n1 + n2; i++) {
// outOfBounds 처리
if (p1 == n1) {
list.add(nums2[p2]);
p2++;
continue;
}
if (p2 == n2) {
list.add(nums2[p1]);
p1++;
continue;
}
// 메인 알고리즘
if (nums1[p1] < nums2[p2]) {
list.add(nums1[p1]);
p1++;
continue;
}
if (nums1[p1] > nums2[p2]) {
list.add(nums2[p2]);
p2++;
continue;
}
if (nums1[p1] == nums2[p2]) {
if (!(p1 == n1)) {
list.add(nums1[p1]);
p1++;
} else {
list.add(nums2[p2]);
p2++;
}
continue;
}
}
return list;
}
public ArrayList<Integer> solution(int n1, int[] nums1, int n2, int[] nums2) {
ArrayList<Integer> answer = new ArrayList<>();
int p1 = 0;
int p2 = 0;
//* index 예외 처리는 while 문으로 하는 게 좋다.
while (p1 < n1 && p2 < n2) {
if (nums1[p1] < nums2[p2]) {
answer.add(nums1[p1++]); //* p1을 넣고, p1 + 1 한다.
} else {
answer.add(nums2[p2++]);
}
}
while (p1 < n1) {
answer.add(nums1[p1++]);
}
while (p2 < n2) {
answer.add(nums2[p2++]);
}
return answer;
}