이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.
문제 설명
코드
첫 번째 코드(정렬 알고리즘을 이용한 방법)
package inflearn_algorithm.chapter3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class sec03_01 {
public static int[] solution(int [] arr1, int [] arr2) {
int[] mergeArr = new int[arr1.length + arr2.length];
for (int i = 0; i < mergeArr.length; i++) {
if(i < arr1.length) mergeArr[i] = arr1[i];
else mergeArr[i] = arr2[i - arr1.length];
}
Arrays.sort(mergeArr);
return mergeArr;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr1 = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) arr1[i] = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(br.readLine());
int[] arr2 = new int[M];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; ++i) arr2[i] = Integer.parseInt(st.nextToken());
for (int i : solution(arr1, arr2)) System.out.print(i + " ");
}
}
두 번째 코드(투 포인터를 이용한 방법)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class sec03_01 {
public static int[] solution(int[] arr1, int[] arr2) {
int[] mergeArr = new int[arr1.length + arr2.length];
int ptr1 = 0, ptr2 = 0, i = 0;
while (ptr1 < arr1.length && ptr2 < arr2.length) {
if (arr1[ptr1] <= arr2[ptr2]) mergeArr[i++] = arr1[ptr1++];
else mergeArr[i++] = arr2[ptr2++];
}
while (ptr1 < arr1.length) mergeArr[i++] = arr1[ptr1++];
while (ptr2 < arr2.length) mergeArr[i++] = arr2[ptr2++];
return mergeArr;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr1 = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) arr1[i] = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(br.readLine());
int[] arr2 = new int[M];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; ++i) arr2[i] = Integer.parseInt(st.nextToken());
for (int i : solution(arr1, arr2)) System.out.print(i + " ");
}
}
설명
두 번째 코드에 대한 설명
- ptr1과 ptr2는 각각 arr1과 arr2의 현재 위치를 가리키며, 두 배열의 끝에 도달할 때까지 반복된다.
- 결과 배열인 mergeArr는 arr1과 arr2의 길이를 합친 크기로 초기화된다.
- 두 배열의 요소를 비교하며 작은 값을 결과 배열에 추가하고, 포인터를 증가시킨다.
- 한 배열의 모든 요소를 처리한 후 다른 배열의 나머지 요소들을 모두 결과 배열에 추가한다.
'자료구조 & 알고리즘 > Inflearn' 카테고리의 다른 글
[인프런 알고리즘] Chpater 3, 3번 문제(최대 매출) (1) | 2024.07.24 |
---|---|
[인프런 알고리즘] Chapter 3, 2번 문제(공통원소 구하기) (1) | 2024.07.23 |
[인프런 알고리즘] Chapter2, 12번 문제(멘토링) (1) | 2024.07.22 |
[인프런 알고리즘] Chpater 2, 11번 문제(임시반장 정하기) (0) | 2024.07.19 |
[인프런 알고리즘] Chpater 2, 10번 문제(봉우리) (0) | 2024.07.18 |