https://leetcode.com/problems/merge-sorted-array/?envType=study-plan-v2&envId=top-interview-150
⏳ 문제
내림차순으로 정렬된 두 개의 정수 배열 nums1
과 nums2
가 주어지며, 각각 nums1
과 nums2
에 있는 요소의 수를 나타내는 두 개의 정수 m
과n
이 주어진다.nums1
과 nums2
를 오름차순으로 정렬된 단일 배열로 병합한다.
최종 정렬된 배열은 함수에 의해 반환되지 않고 nums1
배열 안에 저장되어야 한다. 이를 위해 nums1
의 길이는 m
+ n
이며, 첫 번 째 m
요소는 병합해야 하는 요소를 나타내고 마지막 n
요소는 0
으로 설정되어 무시해야 한다. nums2
의 길이는 n
이다.
⏳ 풀이
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//
int[] arr = new int[m + n];
int arrIndex = 0;
for (int i = 0; i < nums1.length; i++) {
if (nums1[i] != 0) {
arr[arrIndex++] = nums1[i];
}
}
for (int i = 0; i < nums2.length; i++) {
if (nums2[i] != 0) {
arr[arrIndex++] = nums2[i];
}
}
Arrays.sort(arr);
for (int i = 0; i < nums1.length; i++) {
nums1[i] = arr[i];
}
}
}
⏳ 고민
알고리즘을 처음 접하는 나로써 이번 문제를 푸는 과정에 있어서 여러 문제가 발생했다.
1. 배열과 리스트의 차이
2. 알고리즘, 시간복잡도
3. 문제를 해석하는 문해력
이를 위해 배열과 리스트의 개념을 잡기위해 하루동안 블로깅하며 기초적인 지식을 공부했다.
실제로 위에 풀이도 내가 생각해서 짠 코드가 아닌 이해한 코드로 문제 풀이한것이라
스스로 온전히 풀었다고 생각이 들지않지만 이해한 것을 바탕으로 주석으로 풀이를 써보았다.
유튜브를 활용해 니꼬쌤의 시간복잡도와 자료구조에 대한 배경지식을 공부했고
내 스스로 문제를 해결하기위해 지인이나 커뮤니티를 통해 공부하는 방법도 조언받다보니
내가 가진 문제점들이 보이기 시작했다. 하나하나 블로깅 할 예정이다.
결론적으론 과제를 전부하긴 힘들것 같고 잘하는 사람들과 비교 하다보니 초라해지기만해서 멘탈이 부서졌지만
느려도 되니깐, 잠시 뒤쳐진다 생각하고 꾸준히 문제해결을 위해 고민하여 어제의 나만 이기면 되지않을까 하는 생각이든다.
이미 잘하는사람들은 그만큼의 시간과 고민을 투자했기떄문에 당연히 잘 할수 밖에 없다.
다른 선배 개발자분들의 말씀도 비교하기보단 오히려 좀 더 발전하는 형태로 공부하는것이 취업이 늦어지더라도
훌륭한 개발자로서 큰 밑거름이 될 것이라 말씀 해주시기도 했고 그냥 꾸준히 하는방향으로 ...
'CS > 알고리즘 & 자료구조' 카테고리의 다른 글
알고리즘 학습과 메모리 상관관계를 알아보자 (0) | 2023.10.19 |
---|---|
빅오 표기법 (big-O notation)이란? (2) | 2023.10.10 |
[자료 구조] 자바 컬렉션(Collection)에 대해 알아보자 - Java (7) | 2023.08.31 |