티스토리 뷰
반응형
문제
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 첫 번째 배열의 크기 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 |