일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- unity stencil buffer
- c++ 정보은닉
- react native ios 기기 연결
- react
- 벡터와 리스트의 차이
- react native typescript navigation
- react native
- react native typescript
- node.js
- stencil buffer
- react native typescript navigate
- 스탠실 버퍼 사용
- CSS
- react native 타입스크립트
- 리액트 네이티브 설치 오류
- 리액트 네이티브 맥
- C++
- c++ using
- javascript
- html
- node
- react native accessible
- cyworld
- 스탠실 버퍼 튜토리얼
- GitHub
- react-native
- 스탠실 버퍼 시작
- react native mac
- Expo
- 싸이월드
- Today
- Total
혀니의 이거저거 뿌시기
백준 15649 N과 M(1) 본문
15649번: N과 M (1) (acmicpc.net)
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
첫 백트래킹(DFS) 문제였다.
처음이어서 답을 참고했지만 다음부턴 스스로 풀도록 하자.......
N,M = map(int, input().split())
visited = [False] * N
lst = []
def dfs(depth):
if depth == M:
print(' '.join(map(str, lst)))
return
for i in range(N):
if not visited[i]:
visited[i] = True
lst.append(i + 1)
dfs(depth + 1)
visited[i] = False
lst.pop()
dfs(0)
<새로 안 상식>
1.map(str, lst) => map함수는 여러 요소들을 한 번에 형식 변환을 하기 위해 쓰이는 함수로
이렇게 썼을 때는 lst의 모든 요소를 한 번에 str로 바꾼다는 뜻이다.
2.' '.join(lst) : lst의 요소들을 공백을 통해 합한다는 뜻이다.
3.DFS의 기본 구조
- 1.depth의 길이에 해당하는 visited라는 'False' 요소로 이루어진 리스트를 만든다.
- 2.dfs라는 함수는 0부터 시작하여 depth까지 내려가는데, depth에 도달하면 print로 출력하고 return 한다.
- 3.depth에 도달하기 전에는 for문으로 한 타임에 출력해야할 길이만큼 for문을 돌린다.
(이 과정에서 깊이 우선 탐색이 이루어짐)
* 한 번 for문이 돌아갈 때마다 해당하는 visited 의 index가 true로 바뀌며 lst에도 값이 추가된다.
* 그 다음에 재귀로 dfs(depth + 1)로 들어간다.
* 재귀문 실행 뒤에는 빠져나왔기 때문에 빠져나온 만큼 visited를 false로 다시 바꿔주고, lst도 참고할 시 pop으로 마찬가지로 한 요소를 꺼내줘야 함
'알고리즘 공부(C++)' 카테고리의 다른 글
2798 블랙잭 (0) | 2022.08.24 |
---|---|
백준 1010 다리놓기 (0) | 2022.08.24 |
1018 체스판 다시 칠하기 (0) | 2022.08.22 |
2477 참외밭 (0) | 2022.08.18 |
1181 단어 정렬 (0) | 2022.08.17 |