알고리즘/문제풀이

[Python] 백준 15656 N과 M (7)

정찡이 2021. 12. 12. 12:43
728x90

1. 문제 링크

https://www.acmicpc.net/problem/15656

 

15656번: N과 M (7)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

2. 문제 요약

  • N개의 자연수 중 M개를 고른 수열
  • 같은 수를 여러 번 골라도 된다.

3. 아이디어 정리

  1. 증가하는 순서 출력이므로 정렬을 진행한다.
  2. 백트래킹으로 M개를 선택할 때 출력하게 한다. ⇒ 종료 조건
  3. 같은 수 여러 개 가능하기 때문에 for 문에 조건을 없이 넣는다.

 

4. 문제 풀이

4-1. 내 풀이

import sys

def dfs(list_):
    if len(list_) == m:   # 1. Base condition(종료 조건)
        print(*list_)
        return

    for i in arr:         # 2. 백트래킹 
        list_.append(i)
        dfs(list_)
        list_.pop()

n, m = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
arr.sort()

dfs(list())

 

 

5. 결론

  • 백트래킹 문제