개발놀이터
3-1. 두 배열 합치기 본문
package 배열응용3장.두배열합치기3다시1.my;
import java.util.Scanner;
public class Main {
/**
* -내 풀이-
* 이중 for 문을 돌면서 각각의 숫자를 비교한 후 최솟값을 넣는 방향으로 진행했다.
* 거기에 배열 두개를 그냥 새로운 배열로 만들어서 풀었다.
*
* --피드백--
* 두개의 정렬된 배열을 하나의 배열로 만드는 것이 아니라 각각의 배열에서 포인터를 도입해 비교하면 된다.
* 그리고 문제를 잘못 이해하여 입력받은 두 배열은 정렬된 상태라는 것을 눈치채지 못했다.
*
* -선생님의 풀이-
* two pointers algorithm 을 이용해 풀면 간단하게 풀린다.
*
* pt1 = 0, pt2 = 0;
* while (pt1 < n && pt2 < m) {
* if (a[pt1] < b[bt2]) {
* answer.add(a[pt1++]);
* }
* else {
* answer.add(b[pt2++]);
* }
* }
* while (pt1 < n) {
* answer.add(a[pt1++]);
* }
* while (pt2 < m) {
* answer.add(b[pt2++]);
* }
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int input1 = kb.nextInt();
int[] arr1 = new int[input1];
for (int i = 0; i < input1; i++) {
arr1[i] = kb.nextInt();
}
int input2 = kb.nextInt();
int[] arr2 = new int[input2];
for (int i = 0; i < input2; i++) {
arr2[i] = kb.nextInt();
}
System.out.println(solution(arr1, arr2));
}
private static String solution(int[] arr1, int[] arr2) {
String answer = "";
int[] sumArr = new int[arr1.length + arr2.length];
int[] newArr = new int[sumArr.length];
int min = Integer.MAX_VALUE;
for (int i = 0; i < arr1.length; i++) {
sumArr[i] = arr1[i];
}
for (int i = 0; i < arr2.length; i++) {
sumArr[i + arr1.length] = arr2[i];
}
for (int i = 0; i < sumArr.length; i++) {
for (int j = i; j < sumArr.length; j++) {
if (min > sumArr[j]) {
min = sumArr[j];
}
}
newArr[i] = min;
min = Integer.MAX_VALUE;
System.out.print(sumArr[i] + " ");
}
System.out.println();
for (int i = 0; i < newArr.length; i++) {
System.out.print(newArr[i] + " ");
}
return answer;
}
}
package 배열응용3장.두배열합치기3다시1.teacher;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = kb.nextInt();
}
int m = kb.nextInt();
int[] b = new int[m];
for (int i = 0; i < m; i++) {
b[i] = kb.nextInt();
}
for (int x : solution(n, m, a, b)) System.out.print(x + " ");
}
private static ArrayList<Integer> solution(int n, int m, int[] a, int[] b) {
ArrayList<Integer> answer = new ArrayList<>();
int p1 = 0, p2 = 0;
while (p1 < n && p2 < m) {
if (a[p1] < b[p2]) {
answer.add(a[p1++]);
}
else {
answer.add(b[p2++]);
}
}
while (p1 < n) {
answer.add(a[p1++]);
}
while (p2 < m) {
answer.add(b[p2++]);
}
return answer;
}
}
'기타 > 코딩테스트' 카테고리의 다른 글
3-3. 최대 매출 (0) | 2023.02.18 |
---|---|
3-2. 공통 원소 구하기 (0) | 2023.02.18 |
2장 배열 주요개념 및 복습 노트 (0) | 2023.02.14 |
2-12. 멘토링 (0) | 2023.02.14 |
2-11. 임시반장 (0) | 2023.02.14 |