๐Ÿ’ซ ETC/Leetcode

Week 1-1. [Array / String] 88. Merge Sorted Array

ming412 2023. 8. 23. 11:32

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

โœ๏ธ ๋‚˜๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ ์ •๋ฆฌํ•˜๊ธฐ (=์ฒด๊ณ„ํ™”)

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

 

Merge Sorted Array - LeetCode

Can you solve this real interview question? Merge Sorted Array - You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively. Merge nums1 an

leetcode.com

๋‘ ๋ฐฐ์—ด์„ merge ํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ผ.
  • ์ž…๋ ฅ
    • nums1 | arrray := nums2๊นŒ์ง€ mergeํ•˜์—ฌ ์ตœ์ข… ์ •๋ ฌํ•ด์•ผํ•  ๋ฐฐ์—ด, | nums1 | == m + n
    • m | int := nums1์—์„œ 0์ด ์•„๋‹Œ ์›์†Œ์˜ ๊ฐœ์ˆ˜, | m | ∈ [0, 200]
    • nums2 | array := nums1์— merge ๋˜์–ด์•ผํ•  ๋ฐฐ์—ด, | nums2 | == n
    • n | int := nums2์˜ ๊ธธ์ด, | n | ∈ [0, 200]
  • ์ถœ๋ ฅ
    • nums1 | arrray := nums2๊นŒ์ง€ mergeํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด
  • ์กฐ๊ฑด
    • | m + n | ∈ [1, 200]
    • | nums1[i], nums2[j] | ∈ [-10^9, 10^9]
    • ์ตœ์ข…์ ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์€ ํ•จ์ˆ˜๋กœ ๋ฆฌํ„ดํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค. nums1 ๋ฐฐ์—ด ์•ˆ์— ์ €์žฅ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ”Ž ์–ด๋–ค ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋Š”๊ฐ€?

๋ฉ˜ํ† ๋‹˜๊ป˜์„œ 1์ฃผ ์ฐจ์—๋Š” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค๋Š” ์ฃผ๋จน๊ตฌ๊ตฌ์‹์œผ๋กœ๋ผ๋„ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋‚ด๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•˜์…จ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹จ์ˆœํ•˜๊ฒŒ nums1์˜ 0 ์ž๋ฆฌ์— nums2์˜ ์›์†Œ๋“ค์„ ์ฐจ๋ก€๋กœ ๋Œ€์ž…ํ•œ ๋’ค, ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์ƒ๊ฐํ–ˆ๋‹ค.

 

๐Ÿ™ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ: ์ž…๋ ฅ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ

nums1์—์„œ 0(=nums2๋กœ ์ฑ„์›Œ์•ผ ํ•  ์›์†Œ)์˜ ๊ฐœ์ˆ˜๋Š” n์ด๋‹ค.

n๋ฒˆ ๋ฐ˜๋ณตํ–ˆ์„ ๋•Œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n) ์ด๊ณ  n์€ ์ตœ๋Œ€ 200์ด๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ ํ•˜๋‚˜๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“ ์˜์‚ฌ ์ฝ”๋“œ

for (nums1์—์„œ 0์ด ์‹œ์ž‘๋˜๋Š” ๊ณณ๋ถ€ํ„ฐ, nums1 ๋๊นŒ์ง€, 1์”ฉ ๋”ํ•ด) {
	nums1์—์„œ 0 ์ž๋ฆฌ์— nums2 ์›์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ๋„ฃ๋Š”๋‹ค.
}
nums2๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.

 

๐ŸŽฏ ๊ตฌํ˜„ ์ฝ”๋“œ

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

 

๋‚ด ์ฝ”๋“œ๋ฅผ ํƒ๊ตฌํ•ด๋ณด๊ธฐ

โฑ ์„ฑ๋Šฅ ์ธก์ • (์‹œ๊ฐ„๋ณต์žก๋„/๊ณต๊ฐ„๋ณต์žก๋„)

for๋ฌธ์—์„œ i๊ฐ€ m๋ถ€ํ„ฐ nums1.length๊นŒ์ง€, ์ฆ‰ (m + n) - m = n ๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.

๊ณต๊ฐ„์„ ์ถ”๊ฐ€๋กœ ํ• ๋‹น๋ฐ›์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.

 

โœ๏ธ ์„ฑ๋Šฅ ํšŒ๊ณ 

LeetCode ๋ฌธ์ œ์—์„œ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O(m + n) ๋‚ด๋กœ ๊ตฌํ˜„ํ•˜๋ผ๊ณ  ํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚˜์˜์ง€ ์•Š์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ ธ๊ฐ”๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

๐Ÿ’ก ๋ฌด์—‡์„/์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

 

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ํƒ๊ตฌํ•ด๋ณด๊ธฐ

๐ŸŽฏ ๊ตฌํ˜„ ์ฝ”๋“œ

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // variables to work as pointers
        int i = m - 1;
        int j = n - 1;
        int k = nums1.length - 1;

        while(j >= 0){
            if(i >= 0 && nums1[i] > nums2[j]){
                nums1[k] = nums1[i];
                k--; 
                i--;
            } else{
                nums1[k] = nums2[j];
                k--; 
                j--;
            }
        }
    }
}

i๋Š” nums1์—์„œ ์˜๋ฏธ์žˆ๋Š”(=0์ด ์•„๋‹Œ) ์›์†Œ์˜ ๋งˆ์ง€๋ง‰์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , j๋Š” nums2์˜ ๋งˆ์ง€๋ง‰์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

k๋Š” nums1์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

nums1[i]์™€ nums2[j]๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ๋” ํฐ ๊ฐ’์„ k์— ๋„ฃ๋Š”๋‹ค. (์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๊นŒ์ง€ ๋œ๋‹ค.)

๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•œ ํฌ์ธํ„ฐ(i ํ˜น์€ j)์˜ ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

 

j์˜ ๊ฐ’์ด 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋™์•ˆ ์ด๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

โฑ ์„ฑ๋Šฅ ์ธก์ • (์‹œ๊ฐ„๋ณต์žก๋„/๊ณต๊ฐ„๋ณต์žก๋„)

nums1 ๋ฐฐ์—ด์— n + m ๊ฐœ์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n + m)์ด๋‹ค.

๊ณต๊ฐ„์„ ์ถ”๊ฐ€๋กœ ํ• ๋‹น๋ฐ›์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.

 

๐Ÿ›  ๋‚ด ์ฝ”๋“œ์— ์ ์šฉํ•ด๋ณด๊ธฐ

 

 

๋А๋‚€ ์ 

๊ตฌํ˜„์€ ๊ฐ„๋‹จํ–ˆ์ง€๋งŒ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•ด๋ณธ ๊ฒฝํ—˜์ด ๋งŽ์ด ์—†์–ด ๋‚ฏ์„ค์—ˆ๋‹ค.

์•ž์œผ๋กœ ๊ตฌํ˜„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„ฑ๋Šฅ๊นŒ์ง€ ๊ณ ๋ คํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ์—ฐ์Šต์„ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.