Skip to content

팰린드롬 연결리스트 질문 #147

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

Open
dumi33 opened this issue Feb 2, 2022 · 9 comments
Open

팰린드롬 연결리스트 질문 #147

dumi33 opened this issue Feb 2, 2022 · 9 comments

Comments

@dumi33
Copy link

dumi33 commented Feb 2, 2022

212p 에
slow = 2->3이라고 가정해보자. 여기서 slow는 연결리스트이며, slow.next는 3이라는 의미이다.
rev = 2->3이 되고, rev.next=1, 이 되어서 rev = 2->1이 된다고 적혀있습니다

  1. slow는 연결리스트로 slow = 2->3->2->1 라고 보는게 맞는지 궁금합니다. (아니면 처음에 2 하나만 생각하는 건가요?)
    1-2)이럴경우 rev = 2->3->2->1 이 되어 rev.next = 1이기에 rev = 2->1->2->1이 되는건지 아니면 그 뒤는 사라져 2->1이 되는건지도 궁금합니다.
@likejazz
Copy link
Collaborator

likejazz commented Feb 2, 2022

slow = 2->3->2->1라는건 어느 부분을 보고 그렇게 생각하신건가요?

@dumi33
Copy link
Author

dumi33 commented Feb 3, 2022

slow = head를 통해 slow가 head를 참조하기때문에 slow도 연결리스트 형태일것이고
head = 1->2->3->2->1 이고 slow는 2에 있는 상태이기 때문에 그 이후에 연결리스트들(3->2->1)까지 함께 생각해야하는게 아닌가?라는 생각이 들었습니다.

@likejazz
Copy link
Collaborator

likejazz commented Feb 3, 2022

212페이지에서는 head를 언급한적이 없습니다. 아마 풀이와 혼동하시는듯 한데, 다중 할당 이전에 slow2->3으로 가정해보자고 얘기했고 이후 slow는 그냥 3이 됩니다. 설명에도 그렇게 기입되어 있습니다.

@dumi33
Copy link
Author

dumi33 commented Feb 3, 2022

넵 맞습니다. 풀이의 연장선에서 설명된것인줄 알고 오해했네요! 죄송합니다

@dumi33
Copy link
Author

dumi33 commented Feb 3, 2022

확실하게 이해하고 싶은데 자꾸 헷갈리네요
혹시 1->2->3->2->1 의 풀이 예에서
fast, rev, slow 변화 순서대로 적어보았습니다. 제대로 이해한건지 확인해주시면 감사하겠습니다!

  1. fast = 3->2->1
    rev = 1 -> None
    slow = 2->3->2->1

  2. fast = 1
    rev = 2-> 1 -> none
    slow = 3->2->1

  3. fast = 1 # fast가 남아있어서 (홀수라서 slow = slow.next)
    rev = 2-> 1 -> none
    slow =2->1

@likejazz
Copy link
Collaborator

likejazz commented Feb 3, 2022

저것만 봐서는 무슨 말씀인지 잘 모르겠습니다. 사전에 값이 무엇이고 어떤 과정을 거쳐서 저렇게 된다는 얘기인가요? 그리고 문제 정의가 가능하다면 직접 코드를 구현해보면 어떨까요? 실제로 구현해보면 금방 알 수 있는 문제 같네요. 혹시 구현해봤는데도 동작 원리가 이해가 안된다면 구현 코드와 함께 다시 질문 남겨주시면 살펴보도록 하겠습니다.

@dumi33
Copy link
Author

dumi33 commented Feb 3, 2022

책에 나와있는 예시와 코드로 생각한 결과입니다
사전의 값은 책 207p에 나와있는 예시이고
코드는 런너를 이용한 우아한 풀이에서

while fast and fast.next :
    fast = fast.next.next
    rev , rev.next, slow = slow, rev, slow.next 
if fast :
    slow = slow.next

이 코드에서 while문이 1,2번까지 2번 반복되고
3번이 if fast : 부분입니다.

네 구현을 해보았는데 동작이 자세히 이해가 안되서 질문드립니다!

@likejazz
Copy link
Collaborator

likejazz commented Feb 3, 2022

그렇다면 저 사이에 print(fast.val, rev.val, slow.val) 한 줄을 추가하면 직접 디버깅 할 수 있지 않나요?

출력 결과를 확인해달라는건 별로 좋은 질문이 아닌거 같네요. 스스로 디버깅할 수 있는 능력을 키우면 훨씬 더 도움이 될거 같습니다.

@dumi33
Copy link
Author

dumi33 commented Feb 4, 2022

네 print를 넣어 확인하는 것을 잊고있었네요. 죄송합니다
추가하고 확인해서 이해할수있었습니다.

친절하게 답해주셔서 감사합니다

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