티스토리 뷰

반응형

 

문제

오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.

 

입력

첫 번째 줄에 첫 번째 배열의 크기 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

 

 

 

 

 

문제 풀이

 

[첫번째 풀이]

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

public class Main {
    public List<Integer> solution(int[] ns, int[] ms) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int n : ns) list.add(n);
        for (int m : ms) list.add(m);

        return list.stream().sorted().collect(Collectors.toList());
    }

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

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

        Main main = new Main();
        for (Integer i : main.solution(ns, ms)) {
            System.out.print(i + " ");
        }
    }
}

(Time 382ms / Memory 33MB)

 

[두번째 풀이]

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

public class Main {
    public int[] solution(int[] ns, int[] ms) {
        int[] arr = new int[ns.length + ms.length];
        System.arraycopy(ns, 0, arr, 0, ns.length);
        System.arraycopy(ms, 0, arr, ns.length, ms.length);
        
        return Arrays.stream(arr).sorted().toArray();
    }

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

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

        Main main = new Main();
        for (Integer i : main.solution(ns, ms)) {
            System.out.print(i + " ");
        }
    }
}

(Time 381ms / Memory 34MB)

 

[세번째 풀이]

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

public class Main {
    public int[] solution(int[] ns, int[] ms) {
        int[] arr = new int[ns.length + ms.length];
        System.arraycopy(ns, 0, arr, 0, ns.length);
        System.arraycopy(ms, 0, arr, ns.length, ms.length);
        
        Arrays.sort(arr);
        return arr;
    }

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

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

        Main main = new Main();
        for (Integer i : main.solution(ns, ms)) {
            System.out.print(i + " ");
        }
    }
}

(Time 171ms / Memory 27MB)

 

 

 

- 첫번째 풀이는 ArrayList에 두 배열을 넣어서 정렬하였고, 두번째 풀이는 int 배열을 새로 만든 다음에 배열을 복사하는 기능을 이용하여 정렬하였다. 세번째 풀이는 두번째 풀이 방법과 정렬하는 방법만 다르게 풀었다.

- 결과적으론 세번째 풀이처럼 Arrays.sort() 방법을 이용해서 푸는 방식이 시간 단축과 메모리 사용에 효율적이었다.

- 풀이 영상에선 두 개의 배열을 for 문 돌면서 크기를 비교해 차례로 새로운 배열에 추가해주는 방식으로 코드를 짰던데, 왜 있는 기능을 쓰지 않고 노가다 했을까나

 

 

 

 

 

반응형

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

[코딩테스트] 최대 매출  (0) 2022.03.17
[코딩테스트] 공통원소 구하기  (0) 2022.03.14
[코딩테스트] 멘토링  (0) 2022.03.13
[코딩테스트] 임시반장 정하기  (0) 2022.03.11
[코딩테스트] 봉우리  (0) 2022.03.10
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함