반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 데이터분석
- 개발
- 코딩
- 데이터베이스
- AWS
- Index
- 인덱스튜닝
- Oracle
- 오라클
- dfs
- 율코딩
- storage_integration
- 결합인덱스조건
- HackerRank
- 백준
- 결합인덱스란
- 쿼리
- S3
- 문제풀이
- 조인
- dbeaber
- 알고리즘
- 인덱스
- sql
- 자료구조
- 백트래킹
- MySQL
- snowflake
- Join
- DB
Archives
- Today
- Total
율코딩
[알고리즘/백준] N과 M(1) 백트래킹 문제 풀이 본문
반응형
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
문제 설명
- 1부터 N중 하나를 선택한 뒤
- 다음 1부터 N부터 선택할 때, 이미 선택한 값이 아닌 경우 선택
- M개를 선택 할 경우 프린트
아이디어
- 백트래킹 재귀함수 안에서 for 문 돌면서 숫자 선택 ( 이 때 방문여부 확인)
- 재귀함수에서 M개를 선택할 경우 print
시간복잡도
- N!: 중복이 불가, N = 10까지 가능
자료구조
- 방문 여부 : bool[]
- 선택한 값 입력 배열: int[]
n,m = map(int, input().split())
rs = []
chk = [False] * (n+1). #index와 숫자를 맞추기위해 +1
def recur(num):
if num == m:
print(' '.join(map(str,rs)))
return
for i in range(1,n+1):
if chk[i] == False:
chk[i] = True
rs.append(i)
recur(num+1)
chk[i] = False
rs.pop()
recur(0)
Tip
- 백트래킹 문제는 N이 작음 -> N을 확인하고 백트래킹을 사용할 지 말지 정할 수 있다.
- 재귀함수 사용할 때, 종료 시점 잊지말기!
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[알고리즘] 백준 2110번 문제 (0) | 2022.09.25 |
---|---|
[알고리즘] 키로거 5397번 (0) | 2022.08.15 |
Comments