낭만개발자
낭만개발자
낭만개발자
전체 방문자
오늘
어제
  • 분류 전체보기 (57)
    • Web) HTML & CSS (5)
    • Web) HTTP (2)
    • 언어) Java (2)
    • 언어) Python (6)
    • 언어) PHP (1)
    • Linux (2)
    • 데이터 관리) Pandas (4)
    • Algorithms (13)
    • 개발자 역량 (4)
    • 프로젝트 (14)
      • Django 초기 프로젝트 (1)
      • CatCoDog _ 반려동물 식품 판매 사이트 (9)
      • 개인 홈서버 프로젝트 (2)
      • 이력핏 : AI가 추천해주는 이력서 (2)
    • 문제와 사고 (2)
    • ETC (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • algorithm
  • JWT 웹
  • leetcode88
  • 파이썬 자료형
  • 오늘의 문제
  • Merge Sorted Array
  • css basic
  • Leetcode
  • 파이썬 기초
  • css
  • css 포지션
  • css 기본
  • python basic
  • catcodog
  • Java
  • python
  • 리눅스
  • Number Of Island
  • WEB
  • 파이썬
  • dp
  • css 위치변경
  • 파이썬 숫자형
  • rainbow table
  • 웹개발
  • 장고 초기 세팅
  • python operator
  • Unique Paths
  • 파이썬 기본
  • django setting

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
낭만개발자

낭만개발자

[A100C_day 2] Leetcode 88. Merge Sorted Array (java)
Algorithms

[A100C_day 2] Leetcode 88. Merge Sorted Array (java)

2024. 1. 23. 22:46

문제 링크

https://leetcode.com/problems/merge-sorted-array/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

문제 분석

1. 주어진 인자는 sorted array인 nums1, nums2 그리고 각각이 이들의 요소 개수인 m, n 

2. 앞으로 보나 뒤로 보나 two pointer로 풀면 될 것 같다!

3. 중요한 점은 새로운 배열을 리턴하는 것이 아닌, nums1 배열을 조건에 맞게 변경시켜 주는 것!(보통 해외 코테에 이런 유형이 많다고들 한다.)

 


Solution 1. sort() 메서드 활용

ㅋㅋ.. 

그냥 하나로 합쳐서 sort() 메서드 활용.. 

 

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
    
        for(int i = 0; i < n; ++i){
            nums1[i + m] = nums2[i];
        }
   
        Arrays.sort(nums1);
    }
}

 

문제에서 추가로 요구하는 O(m+n)의 시간 복잡도를 만족하지는 못하지만, 

sort()메서드의 시간 복잡도는 O(n log n) 이므로,, O(m+n log m+n)의 시간 복잡도를 갖는다는 것만 파악후 빠르게 넘어가자!

 

그렇다면 O(m+n)의 time-complexity를 위해서는..

 


Solution 2. Three Pointer

기존의 nums1배열만 수정해주면 되므로, nums1의 요소를 복사하는 새로운 배열 nums1Copy를 생성하여 접근해줬다!

 

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
    	//nums1Copy 배열에 값 복사
        int[] nums1Copy = new int[m];
         for (int i = 0; i < m; i++) {
            nums1Copy[i] = nums1[i];
        }
        
        int idx1 = 0, idx2 = 0;
        
        for(int i = 0; i < m + n; ++i){
            if(idx2 >= n || (idx1 < m && nums1Copy[idx1] < nums2[idx2])){
                nums1[i] = nums1Copy[idx1++];
            }else {
                nums1[i] = nums2[idx2++];
            }
        }
        
    }
}

 

idx1, idx2, i 세 인덱스로 케이스 나눠 비교하면 되는 간단한 알고리즘!!

(이제와 생각해보니 i 보다는 다른 변수명을 쓰는게 더 나았을 것 같기도..?)

 

문제 요구대로 O(m+n)의 시간복잡도와, O(m) 정도의 공간복잡도를 갖는 알고리즘!

내일은 오랜만에 dp 풀어볼 예정

저작자표시 (새창열림)

'Algorithms' 카테고리의 다른 글

[Algorithm] Leetcode 1. Two Sum(java)  (0) 2024.01.26
[Algorithm] Leetcode 34. Find First and Last Position of Element in Sorted Array (java)  (0) 2024.01.25
[A100C_day 3] Leetcode 79. Word Search (java)  (0) 2024.01.24
[A100C_day 1] Leetcode 704. Binary Search (java)  (0) 2024.01.22
알고리즘 시작!  (0) 2024.01.22
    낭만개발자
    낭만개발자
    Learning By Doing!💪

    티스토리툴바