코딩 테스트/백준
[Python] 백준 15649 N과 M (1)
위시리
2024. 9. 24. 02:13
문제 분석
- 자연수 N, M
- 1부터 N까지 자연수 중 중복 없이 길이가 M인 수열
- 중복 x, 순서 o
- 순열
코드 설계
- 입력받고
- 1부터 시작하는 길이가 n인 list 생성
- 방문여부를 확인할 길이가 n이고 false값이 저장된 리스트 visited 생성
- def dfs()
- 종료조건 : 답을 넣는 리스트가 m과 같아지면 return
정답 코드
import sys
input = sys.stdin.readline
n, m = list(map(int, input().split()))
ans = []
def dfs() :
if len(ans) == m: # 재귀 : 종료조건
print(' '.join(map(str, ans))) # 리스트 ans의 모든 요소를 문자열로 변환 후, 공백으로 구분하여 하나의 문자열로 결합
return
for i in range(1, n+1): # n번 반복
if i not in ans: # 만약 i가 ans 리스트안에 없으면
ans.append(i) # ans에 넣고
dfs() # 함수를 재귀적으로 호출해서 다음 깊이로 들어감
ans.pop() #
dfs()
itertools
import sys
from itertools import permutations
input = sys.stdin.readline
n, m = map(int, input().split())
arr = [ i for i in range(1,n+1) ]
for i in permutations(arr, m) :
for j in i :
print(j, end = ' ')
print()