Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
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
Tags
more
Archives
Today
Total
관리 메뉴

똥그래미 코딩공장

백준 15650번(N과M(2)) 파이썬 본문

Algorithm

백준 15650번(N과M(2)) 파이썬

동그라미_ssu 2023. 2. 3. 16:06

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()