똥그래미 코딩공장
백준 15650번(N과M(2)) 파이썬 본문
https://www.acmicpc.net/problem/15650
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
전에 풀었던 N과M(1)문제에 오름차순으로 만 된 정답을 출력하라는 조건만 추가됐다.
1번을 푼 사람들은 2번문제는 무리없이 풀었을거라 생각한다.
추가적인 설명은 생략하겠다.
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
ans = []
visited = [False]*(n+1)
def dfs():
if len(ans) == m: # 조건처럼 리스트의 길이가 m이 되면 출력해준다
a = sorted(ans) # ans를 오름차순으로 정렬시킨 후 a에 저장
if ans == a: # 오름차순으로 정렬된 a와 ans가 같은 경우에만 출력해준다.
print(' '.join(map(str,ans)))
return
for i in range(1,n+1):
if visited[i] == True: # 방문했을경우 continue 해준다
continue
visited[i] = True # 미방문일경우 방문처리를 해준다
ans.append(i) # 그리고 리스트에 추가해준다
dfs() # 이어서 dfs문을 재귀함수로 실행한다
ans.pop() # 마지막에 추가됐던 수를 빼준다.
visited[i] = False # 여기가 중요!!!! 방문했던곳을 다시 미방문 처리 해준다
dfs()'Algorithm' 카테고리의 다른 글
| 백준 2512번(예산) 파이썬 (0) | 2023.02.06 |
|---|---|
| 백준 2636번(치즈) 파이썬 (1) | 2023.02.05 |
| 백준 1654번(랜선 자르기) 파이썬 (0) | 2023.02.02 |
| 백준 15649번(N과M(1)) 파이썬 (0) | 2023.02.01 |
| 백준 10816번(숫자 카드2) 파이썬(이분탐색) (0) | 2023.01.31 |