예제 배열이 예쁘게 정렬되어 있어서 그런지 Two Pointers 활용 후 sort 를 굳이 사용하지 않아도 풀리는 것 같은데, 다른 T.C 를 넣어봐야 겠다.
💪 새롭게 배운 내용
System.arraycopy() 메서드에 대해 알게 되었다. (
매개변수 (Object src, int srcPos, Object dest, int destPos, int length)
src
복사하고자 하는 원본
srcPos
원본의 어느 부분부터 읽어올지 위치를 정해줌
처음부터 데이터를 읽어올거면 0을 넣어준다.
dest
복사한 원본을 집어넣을 대상
destPos
어느 부분부터 복사한 것을 받아들일건지 위치를 정해줌
처음부터 복사한 데이터를 저장하려면 0을 넣어준다.
length
복사할 요소의 개수
강의를 듣고 Two Pointers 알고리즘에 대해 알게되었다 !
✅ 본인 풀이
🏋️♀️ 첫 번째 풀이|시도횟수 : 1회 | ⏱ 걸린시간 : 371ms | 💾 메모리 : 33MB
🏋️♀️ 두 번째 풀이|시도횟수 : 1회 | ⏱ 걸린시간 : 370ms | 💾 메모리 : 33MB
1. 첫번째 무지성 풀이
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] firstArray = new int[n];
for (int i = 0; i < n; i++) {
firstArray[i] = sc.nextInt();
}
int m = sc.nextInt();
int[] secondArray = new int[m];
for (int i = 0; i < m; i++) {
secondArray[i] = sc.nextInt();
}
int[] answer = solution(firstArray,secondArray);
Arrays.stream(answer).forEach(s -> System.out.print(s + " "));
}
private static int[] solution(int[] fistArray, int[] secondArray) {
int[] resultArray = new int[fistArray.length + secondArray.length];
System.arraycopy(fistArray, 0, resultArray, 0, fistArray.length);
System.arraycopy(secondArray, 0, resultArray, fistArray.length, secondArray.length);
Arrays.sort(resultArray);
return resultArray;
}
}
-----
2. Two Pointers 알고리즘 활용 풀이
package study.section3;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Section0301Answer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
int m = sc.nextInt();
int[] b = new int[m];
for (int i = 0; i < m; i++) {
b[i] = sc.nextInt();
}
List<Integer> result = solution(n, m, a, b);
result.stream().forEach(s -> System.out.print(s + " "));
}
private static List<Integer> solution(int n, int m, int[] arrA, int[] arrB) {
List<Integer> answer = new ArrayList<>();
int pointerA = 0, pointerB = 0;
// 두 배열 중 하나라도 인덱스가 끝나면 while 문 빠져나오도록 설정
while (pointerA < n && pointerB < m) {
// 두 배열의 인덱스 내부 값을 하나하나 비교한다.
// 둘 중 작은 값을 answer List 에 추가한다.
if (arrA[pointerA] < arrB[pointerB]) {
answer.add(arrA[pointerA]);
pointerA++;
} else {
answer.add(arrB[pointerB]);
pointerB++;
}
}
// 배열에 남은 인덱스 내부 값들을 answer 에 추가하기 위한 작업
while (pointerA < n) {
answer.add(arrA[pointerA]);
pointerA++;
}
while (pointerB < m) {
answer.add(arrB[pointerB]);
pointerB++;
}
return answer;
}
}
📌 문제
⭐️ 아이디어
🤔 고민한 내용
💪 새롭게 배운 내용
System.arraycopy()
메서드에 대해 알게 되었다. (복사할 요소의 개수
Two Pointers
알고리즘에 대해 알게되었다 !✅ 본인 풀이
🏋️♀️
첫 번째 풀이
|시도횟수
: 1회 | ⏱걸린시간
: 371ms | 💾메모리
: 33MB 🏋️♀️두 번째 풀이
|시도횟수
: 1회 | ⏱걸린시간
: 370ms | 💾메모리
: 33MB참조한 자료
https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Algorithm/%ED%88%AC%ED%8F%AC%EC%9D%B8%ED%84%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98.md