[파이썬] 프로그래머스 : 유사 칸토어 비트열 (레벨3)
풀이
방향성 생각
- 범위가 $5^{20}$이라서 그냥은 못푼다.
- 규칙 찾아서 푸는 분할정복 / 재귀 형태가 보인다.
전체코드
def solution(n,l,r):
l -= 1
r -= 1
def dfs(n,l,r):
# 0번째 칸토어 비트열
if n == 0:
return 1
# n-1번째 칸토어 비트열의 길이
leng = 5**(n-1)
count = 0
for i in range(5):
# 11011 에서 0 부분은은 계속 0이므로 세지 않음
if i==2:
continue
# 구간 [s,e]
s,e = i*leng, (i+1)*leng-1
# 잘못된 구간 x
if s>r or e<l:
continue
# n-1번째 칸토어 비트열 개수 카운팅
count += dfs(n-1,max(0,l-s),min(leng-1,r-s))
return count
return dfs(n,l,r)
코멘트
- 분할정복 재귀가 DFS + DP 하다보면 엄청 빨라짐
'Algorithm > etc' 카테고리의 다른 글
[파이썬] 백준 1806 : 부분합 (골드4) (0) | 2024.08.02 |
---|---|
[파이썬] 백준 11660 : 구간 합 구하기 5 (실버1) (0) | 2024.08.02 |
[파이썬] 백준 30804 : 과일탕후루 (실버2) (0) | 2024.06.11 |
[파이썬] 프로그래머스 : 점 찍기 (레벨2) (0) | 2024.06.10 |
[파이썬] 프로그래머스 : 가장 긴 팰린드롬 (레벨3) (0) | 2024.06.10 |
[파이썬] 백준 24041 : 성싶당 밀키트 (골드4) (0) | 2024.06.05 |
[파이썬] 프로그래머스 : N으로표현 (레벨3) (0) | 2024.04.24 |
댓글