What I Learned/Algorithm Practice

[백준 - python] 15649번: N과 M (1)

Interrobang 2022. 12. 12. 00:19

문제 링크

 

15649번: N과 M (1)

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

www.acmicpc.net

문제 풀이

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

case = []
def recursive():
  if len(case) == m:
    print(' '.join(map(str, case)))
    return

  for i in range(1, n + 1):
    if i in case:
      continue
    case.append(i)
    recursive()
    case.pop()

recursive()

15649 N과 M (1) 입출력 예시

*key point: 재귀함수를 이용하여 문제를 푼다. 1 ~ n까지의 반복되는 for문 안에서의 i부터 시작하여 중복되지 않는 수로 다음 수가 정해지고, 전체 길이가 m을 만족하면 해당 case print 된다. 하나의 case가 출력되면 pop되어 사라지고 다시 반복문의 다음 스텝이 시작된다.