-
-
Notifications
You must be signed in to change notification settings - Fork 304
[changhyumm] WEEK 03 solutions #2111
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
Conversation
seungriyou
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이번 한 주도 고생 많으셨습니다~
| count += 1 | ||
| n = n // 2 | ||
| else: | ||
| n = n / 2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
n & n-1로 오른쪽에서부터 1인 비트를 하나씩 지워가며 개수를 세는 방식인 Brian Kernighan's 알고리즘이라는 방법도 있어 공유드립니다~!
| ways = decode(index + 1) | ||
|
|
||
| if index + 1 < len(s) and int(s[index:index+2]) <= 26: | ||
| ways += decode(index + 2) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코멘트와 코드만으로도 명확하게 이해되는 깔끔한 풀이인 것 같습니다!!
추가로 현재 코드는 memoization + dfs를 이용한 top-down DP로 decode(index)를 계산하기 위해 decode(index + 1), decode(index + 2)가 필요한데요,
저는 이를 bottom-up DP로 풀이하고, dp[i]를 계산할 때 dp[i - 1], dp[i - 2]만 확인하므로 DP 테이블을 O(1) space 변수 두 개로 대체하여 공간 복잡도를 최적화했습니다!
이렇게도 풀 수 있어서 참고차 공유드려요~!
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!