ffinn92 / Keep-at-solve-it

꾸준히 알고리즘 풀기 위한 스터디 저장소입니다.
2 stars 3 forks source link

[220413][타니][인프런](3-1) 두 배열 합치기 #8

Closed juni8453 closed 2 years ago

juni8453 commented 2 years ago

📌 문제

⭐️ 아이디어

🤔 고민한 내용

💪 새롭게 배운 내용

✅ 본인 풀이

🏋️‍♀️ 첫 번째 풀이|시도횟수 : 1회 | ⏱ 걸린시간 : 371ms | 💾 메모리 : 33MB 🏋️‍♀️ 두 번째 풀이|시도횟수 : 1회 | ⏱ 걸린시간 : 370ms | 💾 메모리 : 33MB

스크린샷 2022-04-14 오전 9 42 30
1. 첫번째 무지성 풀이

import java.util.Arrays;
import java.util.Scanner;

public class Main {
   public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] firstArray = new int[n];
        for (int i = 0; i < n; i++) {
            firstArray[i] = sc.nextInt();
        }

        int m = sc.nextInt();
        int[] secondArray = new int[m];
        for (int i = 0; i < m; i++) {
            secondArray[i] = sc.nextInt();
        }

        int[] answer = solution(firstArray,secondArray);
        Arrays.stream(answer).forEach(s -> System.out.print(s + " "));
    }

    private static int[] solution(int[] fistArray, int[] secondArray) {
        int[] resultArray = new int[fistArray.length + secondArray.length];

        System.arraycopy(fistArray, 0, resultArray, 0, fistArray.length);
        System.arraycopy(secondArray, 0, resultArray, fistArray.length, secondArray.length);

        Arrays.sort(resultArray);

        return resultArray;
    }
}

-----

2. Two Pointers 알고리즘 활용 풀이

package study.section3;

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

public class Section0301Answer {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }

        int m = sc.nextInt();
        int[] b = new int[m];
        for (int i = 0; i < m; i++) {
            b[i] = sc.nextInt();
        }

        List<Integer> result = solution(n, m, a, b);
        result.stream().forEach(s -> System.out.print(s + " "));
    }

    private static List<Integer> solution(int n, int m, int[] arrA, int[] arrB) {
        List<Integer> answer = new ArrayList<>();
        int pointerA = 0, pointerB = 0;

        // 두 배열 중 하나라도 인덱스가 끝나면 while 문 빠져나오도록 설정
        while (pointerA < n && pointerB < m) {

            // 두 배열의 인덱스 내부 값을 하나하나 비교한다.
            // 둘 중 작은 값을 answer List 에 추가한다.
            if (arrA[pointerA] < arrB[pointerB]) {
                answer.add(arrA[pointerA]);
                pointerA++;
            } else {
                answer.add(arrB[pointerB]);
                pointerB++;
            }
        }

        // 배열에 남은 인덱스 내부 값들을 answer 에 추가하기 위한 작업
        while (pointerA < n) {
            answer.add(arrA[pointerA]);
            pointerA++;
        }

        while (pointerB < m) {
            answer.add(arrB[pointerB]);
            pointerB++;
        }

        return answer;
    }
}

참조한 자료

https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Algorithm/%ED%88%AC%ED%8F%AC%EC%9D%B8%ED%84%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98.md

juni8453 commented 2 years ago

1주차 끝 !