-
[Leetcode] 17. Letter Combinations of a Phone Number (In Python)[Python] 파이썬/Leetcode_Medium 2021. 1. 12. 19:45
간략한 코드들은 github.com/Eastar-DS/Python 의 Leetcode 폴더에도 있습니다
Eastar-DS/Python
Contribute to Eastar-DS/Python development by creating an account on GitHub.
github.com
풀 때 딕셔너리를 만들어놓고 if문을 무지하게 쓰면서 풀어버릴까 하다가 이건 아닌 거 같아서 찾아보니 풀이가 한 줄이다...
이 문제를 통해 reduce라는 함수와 lambda라는 함수를 알게 되었는데 게시판을 하나 만들어서 내가 문제를 풀면서 검색해본 것들을 적어 놓아야겠다고 생각했던 게 떠올랐다.
이틀정도를 이문제만 풀었었는데 오랜만에 적으려니 턱막히네 ㅡㅡ;
reduce(lambda z,w: [x+y for x in z for y in dic[w]], digits, [''])
reduce와 lambda는 나중에 적어서 안내하는것으로 하고 안쪽부터 차근차근 보자.
[x+y for x in z for y in dic[w]]
만 보면 x+y를 원소들로하는 리스트이다. 이 x와 y는 각각 z와 dic[w]안의 원소들을 하나씩 가져오는것이다. 이 z와 w는
lambda z,w: [x+y for x in z for y in dic[w]]
z,w를 변수로하는 함수의 변수이다. 잘 들여다봐야한다!! f(z,w)인것이다.
reduce(lambda z,w: [x+y for x in z for y in dic[w]], digits, [''])
['']를 첫 원소로 z에 넣어주고, digits의 첫 숫자를 w에 넣어서 만들어진 [x+y]리스트를
다시 z에 넣어주고 digits의 두번째 숫자를 w에 넣어서 새로운 [x+y]리스트를 만들고 끝날때까지 반복한다.
참으로 기가막히고 멋있는 코딩이라고 생각한다.
문제의 출처는 leetcode.com/problems/letter-combinations-of-a-phone-number/입니다.
모르시는게 있으시다면 언제든지 댓글로 질문을 남겨주세요. 저에게 큰 공부가 됩니다. 감사합니다.
'[Python] 파이썬 > Leetcode_Medium' 카테고리의 다른 글
[Leetcode] 19. Remove Nth Node From End of List (In Python) (0) 2021.01.14 [Leetcode] 18. 4Sum (In Python) (0) 2021.01.13 [Leetcode] 16. 3Sum Closest (In Python) (0) 2021.01.12 [Leetcode] 15. 3Sum (In Python) (0) 2021.01.11 [Leetcode] 2. Add Two Numbers (In Python) (0) 2021.01.02