Two Pointer - 두 배열 합치기

Chaedie·2022년 5월 17일
0

Java 코테 대비

목록 보기
3/6
post-thumbnail
post-custom-banner

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;
    }
profile
TIL Blog - Today's Intensive Learning!
post-custom-banner

0개의 댓글