Merge Sorted Array

๊ฐ๋๋ฆผ...
public static void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i = m; i < m + n; i++) {
nums1[i] = nums2[i - m];
}
Arrays.sort(nums1);
}
๐์ฝ๋ ์๋๊ฐ ๋ฎ์ ์ด์
ํ์ฌ ์ฝ๋์์ ์๋๊ฐ ๋ฎ์ ์ด์ ๋ Arrays.sort(nums1)
๋๋ฌธ์.
for(int i = m; i < m + n; i++) {
nums1[i] = nums2[i - m]; // nums2์ ์์๋ฅผ nums1์ ๋ค์ชฝ์ ๋ณต์ฌ
}
Arrays.sort(nums1); // ์ ์ฒด ๋ฐฐ์ด์ ๋ค์ ์ ๋ ฌ
์ด ์ฝ๋์์ Arrays.sort(nums1)
๋ ์ต์
์ ๊ฒฝ์ฐ ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง.
์ฆ, ๊ธฐ์กด์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ํ์ฉํ์ง ์๊ณ , ๊ฐ์ ๋ก ๋ค์ ์ ๋ ฌํ๋ ๋ฐฉ์ ์ด๋ผ ๋นํจ์จ ์ ์.
โ
๊ฐ์ ๋ฐฉ๋ฒ: ๋ณํฉ ์ ๋ ฌ (Two Pointers) ํ์ฉ
์ด ๋ฌธ์ ๋ ๋ ๊ฐ์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ณํฉํ๋ ๊ณผ์ ์ด๋ฏ๋ก, ์ด๋ฏธ ์ ๋ ฌ๋ ๋ ๋ฐฐ์ด์ ํ์ฉํด ๋ค์์๋ถํฐ ๋ณํฉํ๋ ๋ฐฉ์(์ญ์ ๋ณํฉ) ์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์.
โ์๊ฐ ๋ณต์ก๋ : (์ ๋ ฌ ์์ด ๋ณํฉ๋ง ์ํ)
๐๊ณต๊ฐ ๋ณต์ก๋: (์ถ๊ฐ ๊ณต๊ฐ ์์ด nums1
๋ด๋ถ์์ ์ง์ ๋ณํฉ)
๐ ๊ฐ์ ๋ ์ฝ๋(Two Pointers, ์ญ์ ๋ณํฉ)
import java.util.Arrays;
public class MergeSortedArray{
public static void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1; // nums1 ์ ๋ง์ง๋ง ์ค์ ์์ ์์น
int p2 = n - 1; // nums2 ์ ๋ง์ง๋ง ์์ ์์น
int p = m + n - 1; // ๋ณํฉ ํ nums1์ ๋ง์ง๋ง ์์น
while(p1 >= 0 && p2 >= 0) {
if(nums1[p1] > nums2[p2]) {
nums1[p] = nums1[p1];
p1--;
} else {
nums1[p] = nums2[p2];
p2--;
}
p--;
}
// nums2 ์ ๋จ์ ์์ ์ฒ๋ฆฌ (nums1์ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์์ผ๋ฏ๋ก ๋ฐ๋ก ์ฒ๋ฆฌํ ํ์๋ ์์.)
while(p2 >= 0) {
nums1[p] = nums2[p2];
p2--;
p--;
}
}
// ํ
์คํธ ์คํ
public static void main(String[] args) {
int[] nums1 = {1, 2, 3, 0, 0, 0};
int m = 3;
int[] nums2 = {2, 5, 6};
int n = 3;
merge(nums1, m, nums2, n);
System.out.println(Arrays.toString(nums1)); // ์ถ๋ ฅ: [1, 2, 2, 3, 5, 6]
}
}
๐ ์ฝ๋ ์ค๋ช
ํฌ์ธํฐ 3๊ฐ ์ค์
p1 = m - 1
:nums1
์ ๋ง์ง๋ง ์์ ์์น (์ ํจ ๋ฐ์ดํฐ ๋ฒ์)p2 = n - 1
:nums2
์ ๋ง์ง๋ง ์์ ์์นp = m + n - 1
:nums1
์ ๋ง์ง๋ง ๋น ๊ณต๊ฐ๋ถํฐ ์ฑ์ฐ๊ธฐ ์์
**๋ค์์๋ถํฐ ํฐ ๊ฐ์ ์ ํํ์ฌ ๋ฐฐ์น()
nums1[p1]
๊ณผnums2[p2]
๋ฅผ ๋น๊ตํฐ ๊ฐ์
nums1[p]
์ ๋ฐฐ์น ํ ํด๋น ํฌ์ธํฐ ๊ฐ์p1
๋๋p2
์ค ํ๋๊ฐ ๋๋ ๋๊น์ง ๋ฐ๋ณต
๋จ์
nums2
์์ ์ฒ๋ฆฌnums2
์ ๋จ์ ์์๊ฐ ์๋ค๋ฉดnums1
์๋ถ๋ถ์ ๋ณต์ฌ
๐ ์ ๋ ๋น ๋ฅธ๊ฐ?
์ ๋ ฌ () ์ ์ ๊ฑฐํ๊ณ
O(m+n)
์ผ๋ก ์ต์ ํํ ๋ฒ์ ๋ฐ๋ณต๋ง ์ํํ๋ฉฐ ์ถ๊ฐ ๊ณต๊ฐ(O(1)) ์์ด ํด๊ฒฐ
์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ํ์ฉํ์ฌ ํจ์จ์ ์ ๋ ฌ ์ ์ง
๐์ฑ๋ฅ์ฐจ์ด
๊ธฐ์กด ์ฝ๋ (Arrays.sort()
)
O((m+n) log(m+n))
O(1)
์ ๋ ฌ์ ๋ฌด์กฐ๊ฑด ์ํํ๋ฏ๋ก ๋นํจ์จ์
๊ฐ์ ์ฝ๋ (Two Pointers)
O(m + n)
O(1)
์ง์ ๋ณํฉํ์ฌ ๋ถํ์ํ ์ ๋ ฌ ์ ๊ฑฐ
๐ ๋ฐฐ์ด์ด ์ ๋ ฌ๋ ์ํ์ด๋ฏ๋ก, ๋ถํ์ํ sort()
๋ฅผ ์์ ๊ณ ๋ค์์๋ถํฐ ๋ณํฉํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋จ! ๐
Last updated
Was this helpful?