반응형

문제 링크: https://www.acmicpc.net/problem/15649

 

15649번: N과 M (1)

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

www.acmicpc.net

 

 

내 풀이

1) 수열을 담을 리스트 하나 생성 arr = list()

2) dfs() 함수 만든다.

- 탈출조건은 arr 리스트의 길이가 m이 된 경우 출력하고 리턴한다.

- 1부터 n까지 반복하며 arr에 들어있지 않은 수를 append()한다. 

- 그리고 dfs() 재귀함수 반복

- 재귀가 끝나면 backtracking 해서 그 다음으로 넘어간다. pop()

 

# boj15649 N과 M
# 실버3

# 메모리 30840 KB
# 시간 212 ms

n, m = map(int, input().split())
arr = list()

def dfs():
    # 탈출 조건 : 수열 길이가 m 됐을 때.
    if len(arr) == m:
        print(' '.join(map(str, arr)))
        return

    # arr에 오름차순으로 append
    for i in range(1, n+1):
        if i not in arr:
            arr.append(i)
            dfs()
            arr.pop() # backtracking
dfs()
반응형

+ Recent posts