일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 그래프 탐색
- 다이나믹 프로그래밍
- 그래프 이론
- 정처기 필기
- 일단 시도
- 냅색 알고리즘
- lazy evaluation
- 그래프탐색
- Container vs VM
- 모듈러 연산 분배법칙
- 너비 우선 탐색
- 최장공통부분문자열
- LCS 알고리즘
- error:0308010C:digital envelope routines::unsupported
- 파이썬
- 수학
- 동적 계획법
- 최장공통부분수열
- Docker 원리
- 문자열
- 구현
- 배낭 문제
- 깊이 우선 탐색
- Python
- db replication
- bfs
- npm start
- 클래스
- 나는 바보야...
- dfs
Archives
- Today
- Total
Save my data
백준 6603 : 로또 본문
dfs 개념이 활용된 문제이다.
처음에는 아래와 같이 깊이를 의미하는 d를 추가를 안했다.
그런데 아래와 같이 하면 idx를 층으로 쓴다는 얘기인데 그렇게 되면 '층'을 의미하는 원소와, '값(크기)'을 의미하는 원소간 의미 구분이 안된다.
import sys
def ans(idx):
if idx >= 7:
print(*res)
return 0
for i in range(idx, t[0] + 1):
res.append(t[i])
ans(i + 1)
res.pop()
while 1:
t = [*map(int, sys.stdin.readline().split())]
res = []
if t[0]:
ans(1)
else:
break
그래서 '값(크기)'이 커져버리면 현재 '층' 수가 높은 것으로 착각되면서 탐색이 중간에 끊겨버린다.
그래서 아래와 같이 바꿨다.
import sys
def ans(idx, d):
if d == 7:
print(*res)
return 0
for i in range(idx, t[0] + 1):
res.append(t[i])
ans(i + 1, d + 1)
res.pop()
while 1:
t = [*map(int, sys.stdin.readline().split())]
res = []
if t[0]:
ans(1, 1)
else:
break
print()
이제는 '층' 개념을 추가해줬기 때문에 6층을 탐색하면서 '값' 에 해당하는 인덱스가 높아지더라도 현재 탐색중인 층과 헷갈리지 않는다.
중간에 '이거 dfs 문제구나.' 하고 감으로 맞춘 순간이 있긴 했는데, 그 때 그냥 안넘어가고 모르는 부분 확실하게 짚고 넘어가니까, 내가 모르는게 정확히 뭔지와 dfs의 활용법에 대해 더 깊이 이해하게 된 것 같다.
'알고리즘 & SQL > 백준' 카테고리의 다른 글
[백준 2738] 행렬 덧셈 (0) | 2024.04.22 |
---|---|
백준 1676 : 팩토리얼 0의 개수 (0) | 2023.09.04 |
백준 1620 : 나는야 포켓몬 마스터 이다솜 (파이썬) (0) | 2023.03.15 |
백준 9506 : 약수들의 합 (파이썬) (0) | 2023.03.12 |
백준 5086 : 배수와 약수 (파이썬) (0) | 2023.03.08 |
Comments