개발놀이터

3-1. 두 배열 합치기 본문

기타/코딩테스트

3-1. 두 배열 합치기

마늘냄새폴폴 2023. 2. 18. 09:36

 

package 배열응용3장.두배열합치기3다시1.my;

import java.util.Scanner;

public class Main {

    /**
     * -내 풀이-
     * 이중 for 문을 돌면서 각각의 숫자를 비교한 후 최솟값을 넣는 방향으로 진행했다.
     * 거기에 배열 두개를 그냥 새로운 배열로 만들어서 풀었다.
     *
     * --피드백--
     * 두개의 정렬된 배열을 하나의 배열로 만드는 것이 아니라 각각의 배열에서 포인터를 도입해 비교하면 된다.
     * 그리고 문제를 잘못 이해하여 입력받은 두 배열은 정렬된 상태라는 것을 눈치채지 못했다.
     *
     * -선생님의 풀이-
     * two pointers algorithm 을 이용해 풀면 간단하게 풀린다.
     *
     * pt1 = 0, pt2 = 0;
     * while (pt1 < n && pt2 < m) {
     *     if (a[pt1] < b[bt2]) {
     *         answer.add(a[pt1++]);
     *     }
     *     else {
     *         answer.add(b[pt2++]);
     *     }
     * }
     * while (pt1 < n) {
     *     answer.add(a[pt1++]);
     * }
     * while (pt2 < m) {
     *     answer.add(b[pt2++]);
     * }
     */

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int input1 = kb.nextInt();
        int[] arr1 = new int[input1];
        for (int i = 0; i < input1; i++) {
            arr1[i] = kb.nextInt();
        }
        int input2 = kb.nextInt();
        int[] arr2 = new int[input2];
        for (int i = 0; i < input2; i++) {
            arr2[i] = kb.nextInt();
        }

        System.out.println(solution(arr1, arr2));
    }

    private static String solution(int[] arr1, int[] arr2) {
        String answer = "";
        int[] sumArr = new int[arr1.length + arr2.length];
        int[] newArr = new int[sumArr.length];
        int min = Integer.MAX_VALUE;

        for (int i = 0; i < arr1.length; i++) {
            sumArr[i] = arr1[i];
        }

        for (int i = 0; i < arr2.length; i++) {
            sumArr[i + arr1.length] = arr2[i];
        }

        for (int i = 0; i < sumArr.length; i++) {
            for (int j = i; j < sumArr.length; j++) {
                if (min > sumArr[j]) {
                    min = sumArr[j];
                }
            }
            newArr[i] = min;
            min = Integer.MAX_VALUE;
            System.out.print(sumArr[i] + " ");
        }

        System.out.println();

        for (int i = 0; i < newArr.length; i++) {
            System.out.print(newArr[i] + " ");
        }

        return answer;
    }
}

 

package 배열응용3장.두배열합치기3다시1.teacher;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        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 : solution(n, m, a, b)) System.out.print(x + " ");
    }

    private static 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;
    }
}

'기타 > 코딩테스트' 카테고리의 다른 글

3-3. 최대 매출  (2) 2023.02.18
3-2. 공통 원소 구하기  (0) 2023.02.18
2장 배열 주요개념 및 복습 노트  (0) 2023.02.14
2-12. 멘토링  (0) 2023.02.14
2-11. 임시반장  (0) 2023.02.14