Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

blog/leetcode_median_of_two_sorted_arrays #41

Open
utterances-bot opened this issue Jan 15, 2024 · 2 comments
Open

blog/leetcode_median_of_two_sorted_arrays #41

utterances-bot opened this issue Jan 15, 2024 · 2 comments

Comments

@utterances-bot
Copy link

Median of Two Sorted Array (Leetcode)

Median of Two Sorted Array (Leetcode)

http://localhost:3000/blog/leetcode_median_of_two_sorted_arrays

Copy link
Owner

이 코드는 두 정렬된 배열 nums1nums2의 중앙값을 찾는 함수입니다. if 절은 두 배열에서 다음에 고려할 원소를 결정하는 데 사용됩니다. 이해를 돕기 위해 if 절을 분석해 보겠습니다.

if (i < nums1.length && (j >= nums2.length || nums1[i] < nums2[j])) {
    current = nums1[i++];
} else {
    current = nums2[j++];
}

if 절의 각 부분은 다음과 같은 조건을 확인합니다:

  1. i < nums1.length: 인덱스 inums1 배열의 범위 내에 있는지 확인합니다. 즉, nums1 배열에서 아직 고려하지 않은 원소가 남아 있는지 확인합니다.
  2. j >= nums2.length: 인덱스 jnums2 배열의 범위를 벗어났는지 확인합니다. 즉, nums2 배열의 모든 원소가 이미 고려되었는지 확인합니다.
  3. nums1[i] < nums2[j]: nums1 배열의 현재 원소가 nums2 배열의 현재 원소보다 작은지 확인합니다.

if 절의 조건은 다음 두 가지 경우 중 하나에 해당할 때 true가 됩니다:

  • nums1 배열에 아직 고려하지 않은 원소가 있고 (i < nums1.length), nums2 배열의 모든 원소가 이미 고려되었거나 (j >= nums2.length) nums1의 현재 원소가 nums2의 현재 원소보다 작을 때 (nums1[i] < nums2[j]).
  • 즉, nums1의 다음 원소가 nums2의 다음 원소보다 작거나, nums2의 원소가 더 이상 남아 있지 않을 때입니다.

이 조건에 따라 current 변수는 두 배열의 원소 중 다음으로 작은 값을 가집니다. 이렇게 하면 두 배열의 원소들을 실제로 병합하지 않고도 순차적으로 접근하여 중앙값을 찾을 수 있습니다.

Copy link
Owner

최적화된 함수의 작동 방식을 보다 잘 이해하기 위한 예시:

예시 1

nums1 = [1, 3]
nums2 = [2]

이 경우에는 nums1nums2를 합쳤을 때 [1, 2, 3]이 되고, 중앙값은 2입니다.

  • 첫 번째 반복(k=0): i = 0, j = 0, current = 1 (nums1[0]nums2[0]보다 작음)
  • 두 번째 반복(k=1): i = 1, j = 0, current = 2 (nums1[1]nums2[0]보다 큼)

결과: 중앙값은 2 (isEvenfalse이므로 current의 값)

예시 2

nums1 = [1, 2]
nums2 = [3, 4]

이 경우에는 nums1nums2를 합쳤을 때 [1, 2, 3, 4]이 되고, 중앙값은 (2 + 3) / 2 = 2.5입니다.

  • 첫 번째 반복(k=0): i = 0, j = 0, current = 1 (nums1[0]nums2[0]보다 작음)
  • 두 번째 반복(k=1): i = 1, j = 0,

current = 2 (nums1[1]nums2[0]보다 작음)

  • 세 번째 반복(k=2): i = 2, j = 0, current = 3 (nums1의 원소가 더 이상 없으므로 nums2[0] 선택)

결과: 중앙값은 (2 + 3) / 2 = 2.5 (isEventrue이므로 currentprevious의 평균)

예시 3

nums1 = [1, 5]
nums2 = [2, 3, 4, 6]

이 경우에는 nums1nums2를 합쳤을 때 [1, 2, 3, 4, 5, 6]이 되고, 중앙값은 (3 + 4) / 2 = 3.5입니다.

  • 반복을 통해 ij가 증가하면서 두 배열의 원소들을 순차적으로 비교합니다.
  • k = 3에 도달했을 때, current = 4, previous = 3입니다.

결과: 중앙값은 (3 + 4) / 2 = 3.5 (isEventrue이므로 currentprevious의 평균)

이러한 예시들은 함수가 어떻게 두 정렬된 배열에서 중앙값을 찾는지 보여줍니다. if 문은 두 배열의 현재 원소 중 더 작은 값을 current로 선택하고, 이를 통해 중앙값에 도달할 때까지 반복합니다. 배열의 길이가 짝수인 경우, 중앙에 위치한 두 원소의 평균을 반환하고, 홀수인 경우 중앙 원소

예시 코드의 실행 결과는 다음과 같습니다:

  1. 예시 1 (nums1 = [1, 3], nums2 = [2]): 중앙값은 2입니다.
  2. 예시 2 (nums1 = [1, 2], nums2 = [3, 4]): 중앙값은 2.5입니다.
  3. 예시 3 (nums1 = [1, 5], nums2 = [2, 3, 4, 6]): 중앙값은 3.5입니다.

이 결과는 앞서 설명한 로직대로 두 배열에서 중앙값을 찾는 방식을 정확히 반영하고 있습니다. if 절은 두 배열에서 다음 원소를 비교하여 더 작은 값을 선택하고, 이를 통해 중앙값을 효과적으로 찾아냅니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants