본문 바로가기
Java/Coding-Test

[Java] 3-1 두 배열 합치기

by JS1111 2022. 1. 19.

문제

오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.
각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.
출력
오름차순으로 정렬된 배열을 출력합니다.
예시 입력

3
1 3 5
5
2 3 6 7 9

예시 출력

1 2 3 3 5 6 7 9

출처
인프런 - 자바-알고리즘-문제풀이-코테대비

내 풀이

while문 사용

private static void combineArray1(int[] arr1, int[] arr2) {
    int index1 = 0;
    int index2 = 0;
    while (true) {
        if (arr1[index1] < arr2[index2]) {
            System.out.print(arr1[index1++] + " ");
        } else {
            System.out.print(arr2[index2++] + " ");
        }
        if (index1 == arr1.length) { // arr1이 전부 출력되면
            for (int i = index2; i < arr2.length; i++) { // 남은 arr2를 전부 출력
                System.out.print(arr2[i] + " ");
            }
            break;
        } else if (index2 == arr2.length) {
            for (int i = index1; i < arr1.length; i++) {
                System.out.print(arr1[i] + " ");
            }
            break;
        }
    }
}

값을 비교해 가면서 한 쪽 배열이 다 출력되면 다른 한쪽을 전부 출력한다


Stream 사용

private static void combineArray2(int[] arr1, int[] arr2) {
    int[][] arrays = {arr1, arr2};
    Arrays.stream(arrays)
            .flatMapToInt(Arrays::stream)
            .sorted()
            .forEach(n -> System.out.print(n + " "));
}

배열 요소들을 모아서 정렬한 뒤 출력한다

다른 풀이

/* 강의 풀이 */
public static ArrayList<Integer> solution(int length1, int length2, int[] arr1, int[] arr2) {
    ArrayList<Integer> answer = new ArrayList<>();
    int index1 = 0, index2 = 0;

    // 한 배열이 다 출력되면 while문이 멈추게된다
    while (index1 < length1 && index2 < length2) { 
        if (arr1[index1] < arr2[index2]) answer.add(arr1[index1++]);
        else answer.add(arr2[index2++]);
    }

    // 다 출력된 쪽은 while문이 실행안됨
    while (index1 < length1) answer.add(arr1[index1++]);
    while (index2 < length2) answer.add(arr2[index2++]);

    return answer;
}

'Java > Coding-Test' 카테고리의 다른 글

[Java] 3-3 최대 매출  (0) 2022.01.20
[Java] 3-2 공통원소 구하기  (0) 2022.01.19
[Java] 2-12 멘토링  (0) 2022.01.18
[Java] 2-11 임시반장 정하기  (0) 2022.01.18
[Java] 2-10 봉우리  (0) 2022.01.18

댓글