본문 바로가기
CS/알고리즘 & 자료구조

알고리즘을 처음 시작하며, 정렬된 배열을 병합해보자 (LeetCode - 88)

by Ropung 2023. 8. 24.

https://leetcode.com/problems/merge-sorted-array/?envType=study-plan-v2&envId=top-interview-150

 

⏳ 문제

내림차순으로 정렬된 두 개의 정수 배열 nums1nums2가 주어지며, 각각 nums1nums2에 있는 요소의 수를 나타내는 두 개의 정수 mn이 주어진다.
nums1nums2를 오름차순으로 정렬된 단일 배열로 병합한다.
최종 정렬된 배열은 함수에 의해 반환되지 않고 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. 문제를 해석하는 문해력

이를 위해 배열과 리스트의 개념을 잡기위해 하루동안 블로깅하며 기초적인 지식을 공부했다.
실제로 위에 풀이도 내가 생각해서 짠 코드가 아닌 이해한 코드로 문제 풀이한것이라
스스로 온전히 풀었다고 생각이 들지않지만 이해한 것을 바탕으로 주석으로 풀이를 써보았다.

유튜브를 활용해 니꼬쌤의 시간복잡도와 자료구조에 대한 배경지식을 공부했고
내 스스로 문제를 해결하기위해 지인이나 커뮤니티를 통해 공부하는 방법도 조언받다보니
내가 가진 문제점들이 보이기 시작했다. 하나하나 블로깅 할 예정이다.

결론적으론 과제를 전부하긴 힘들것 같고 잘하는 사람들과 비교 하다보니 초라해지기만해서 멘탈이 부서졌지만
느려도 되니깐, 잠시 뒤쳐진다 생각하고 꾸준히 문제해결을 위해 고민하여 어제의 나만 이기면 되지않을까 하는 생각이든다.

이미 잘하는사람들은 그만큼의 시간과 고민을 투자했기떄문에 당연히 잘 할수 밖에 없다.
다른 선배 개발자분들의 말씀도 비교하기보단 오히려 좀 더 발전하는 형태로 공부하는것이 취업이 늦어지더라도
훌륭한 개발자로서 큰 밑거름이 될 것이라 말씀 해주시기도 했고 그냥 꾸준히 하는방향으로 ...