홍우진의 개발 일기장

[백준] 15649번: N과 M (1)/ 파이썬 본문

알고리즘/백준

[백준] 15649번: N과 M (1)/ 파이썬

홍우진 2022. 9. 15. 22:36
728x90
반응형

문제 링크


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

 

15649번: N과 M (1)

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

www.acmicpc.net

풀이 코드


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

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

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

f()

코드 해석


DPS를 기반으로 풀이한다.

수열을 저장하기 위한 리스트를 생성한다.

리스트에 들어갈 수열이 m개가 되면 리스트 속의 숫자를 모두 출력 후 끝낸다.

리스트 중복여부를 확인한 후 중복이 아니라면 숫자를 리스트에 넣는다.

그 후 재귀함수 형식으로 수를 출력후 pop을 반복한다.

728x90
반응형
Comments