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

Group Anagram 문제의 잘못된 반환형 #16

Closed
rekyungmin opened this issue Aug 15, 2020 · 1 comment
Closed

Group Anagram 문제의 잘못된 반환형 #16

rekyungmin opened this issue Aug 15, 2020 · 1 comment

Comments

@rekyungmin
Copy link

안녕하세요. 초판 1쇄 기준으로 153페이지의 그룹 애너그램 문제에 대한 반환형이 잘못되어 이슈 등록합니다.

TL;DR

그룹 애너그램 문제에서는 반환형에 대한 타입 힌팅을 List[List[str]] 로 명시하고 있습니다. 하지만 책의 풀이에서는 view 객체를 반환하고 있습니다. view 객체와 list 객체는 서로 다른 객체이기 때문에

return anagrams.values()

대신

return list(anagrams.values())

리스트 타입으로 변환한 뒤 리턴하는 것이 올바르다 생각합니다.

이유

  1. view 객체와 list 객체는 ==연산자에 의한 비교가 성립하지 않습니다.
>>> a = [1, 2, 3]
>>> b = {1: 1, 2: 2, 3: 3}
>>> a == b.values()
False
>>> b.values() == a
False
>>> list(b.values()) == a
True
  1. view 객체는 원본 딕셔너리에 대한 연결이 유지됩니다.
# view
>>> a = {1: 1, 2: 2}
>>> view = a.values()
>>> view
dict_values([1, 2])
>>> a[1] = 2
>>> view
dict_values([2, 2])

# list
>>> a = {1: 1, 2: 2}
>>> no_view = list(a.values())
no_view
[1, 2]
>>> a[1] = 2
>>> no_view
[1, 2]

결론

현재는 leetcode에서 view 객체를 반환해도 문제가 없습니다. 다만, 추후 오답으로 바뀐다거나 타 플랫폼에서는 오답으로 채점할 가능성을 배제할 수 없기 때문에 올바른 타입으로 반환해야한다고 생각합니다. 감사합니다.

@likejazz
Copy link
Collaborator

네, 그렇네요.
리트코드에서는 List[List[str]]를 요구하고 있는 만큼 제안해 주신 대로,

return list(anagrams.values())

로 처리하는게 맞겠습니다.
상세한 분석과 함께, 알려주셔서 감사합니다.
정오표 및 증쇄 시 반영하도록 하겠습니다.

감사합니다.

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