Algorithm/BAEKJOON

[백준 BOJ] 15649 N과 M(1) (python)

DongKeun2 2022. 3. 4. 21:11

문제 출처 : https://www.acmicpc.net/problem/15649

 

15649번: N과 M (1)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

🔥 작성 코드

def sol(lst):
    if len(result) == M:
        print(*result)
        return
    else:
        for i in range(N):
            if v[i] == 0:
                v[i] = 1
                result.append(lst[i])
                sol(lst)
                result.pop()
                v[i] = 0
        return

N, M = map(int, input().split())
lst = [i for i in range(1, N+1)]
result = []
v = [0 for _ in range(N)]
sol(lst)

 

⭕ 해설

  1.  N, M을 입력받습니다.
  2. 1부터 N까지의 값을 lst에 저장, 방문배열 v에 0을 N개 저장합니다.
  3. 한 개씩 result에 넣고 v를 1로 바꾸어 줍니다.
  4. 그 상태로 다시 함수를 호출합니다.
  5. result와 v를 다시 바꾸어주고 반복합니다.
  6. result의 길이가 M이 되는 순간 출력하고 함수를 종료합니다.