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

1_7_merge_arr_2 질문이 있습니다. #6

Open
diligejy opened this issue Jun 26, 2021 · 1 comment
Open

1_7_merge_arr_2 질문이 있습니다. #6

diligejy opened this issue Jun 26, 2021 · 1 comment
Assignees

Comments

@diligejy
Copy link

안녕하세요 책 잘 읽고 있습니다.

책을 읽다보니 이 부분이 계속 헷갈리는데요.

코드 수정 이전 책에 나온 원문을 보면
nums2[k - 1] = nums2[k]라고 나와있습니다.

그럼 예를 들어 nums2[0]을 nums1의 요소와 바꿨고, nums2[0]의 요소가 nums2[1]보다 크다고 할 때
nums2[0]의 값을 nums2[1]으로 바꿔주는데, nums2[1]은 바뀌지 않아서 문제가 되지 않을까 싶었습니다.

수정된 코드도 마찬가지라고 생각했습니다.

구체적으로 보면

책에 나온 예시대로 nums1 = [10], nums2 = [2, 3]이라고 할 때
nums1의 10은 nums2의 2와 비교되고 nums1 = [2]가 됩니다.

그럼 nums2 = [10, 3]상태인데,

코드에 따르면 nums[0] = 3으로 대체해준 다음 nums2[1]을 10으로 바꿔주는 건 없기 때문에 문제가 되지 않을까요?

제가 정확히 이해하질 못해서 도움을 부탁드리겠습니다. 감사합니다.

@daeseokyoun daeseokyoun self-assigned this Jun 27, 2021
@daeseokyoun
Copy link
Owner

지적해주시대로 수정되기 전의 코드는 바껴야하는 값이 바뀌질 않아 문제가 있었습니다.

제가 정확히 이해를 하고 답변드리는 것인지 모르겠지만,

def merge(nums1: List[int], m: int, nums2: List[int], n: int) -> None:
for i, nums1_item in enumerate(nums1):
if nums1_item > nums2[0]:
nums1[i] = nums2[0]
nums2[0] = nums1_item
k = 1
while k < n and nums2[k] < nums1_item:
nums2[k - 1] = nums2[k]
k += 1
nums2[k - 1] = nums1_item

제시해주신 예제를 기준으로 num1 = [10]이고 num2 = [2, 3]이라면 처음 19라인에서 num1[0] 와 num2[0] 가 각각 10과 2이기 때문에 교환이 되어 말씀해주신 대로 num1 = [2], ```nums2 = [10, 3]````이 됩니다.

이후 23~27라인은 num2 배열을 정렬한다고 보시면 되는데요.
k = 1일때, num2[1]의 값이 현재 10(num1_item)의 값보다 작기 때문에 24라인의 코드는 참이라서 루프 내부로 들어갑니다. 그런 다음 num2[k - 1] = num2[k] (현재 nums2[0] = 3) 을 실행합니다. 그리고 다음 라인(26)에서 k가 2가 됩니다. k가 2인채로 24라인에 들어서면 while k < n 조건이 맞지 않기 때문에 루프를 종료하게 됩니다

그리고 마지막 k = 2인 경우에 num2[k - 1] = 10 이 되어 최종 num2에는 [3,10]이 되게 됩니다.

질문 주신

코드에 따르면 nums[0] = 3으로 대체해준 다음 nums2[1]을 10으로 바꿔주는 건 없기 때문에 문제가 되지 않을까요?

k값을 잘 추적하시면 해결 될 것 같습니다.
추가 질문이 있으시면 언제든 주세요~

감사합니다.

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