CS log

[백준] 15663 : N과 M 본문

카테고리 없음

[백준] 15663 : N과 M

sj.cath 2025. 1. 19. 04:10

 

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

 

 

import sys

def dfs(n,tlst) :
    if n==M : # 종료조건
        ans.append(tlst) # tlst : 현재까지 만들어진 순열
        return
    
    prev = 0 # 중복 안하기 위해서 설정한 값
    for j in range(N) : # 주어진 리스트에서 
        if v[j] == 0 and prev != lst[j] : 
            # 숫자가 이미 사용 안했는가? + 중복 확인
            prev = lst[j] # 이전 숫자와 같지 않은 경우만 선택해서 중복 방지
            v[j]=1 # 숫자를 선택했으므로 방문 상태를 1로 설정
            dfs(n+1, tlst+[lst[j]]) # 백트래킹
            v[j] =0 # 다른 순열 탐색 초기화
            
N,M = map(int, input().split())
lst = sorted(list(map(int, input().split())))

ans = []
v = [0]*N
dfs(0,[])

for lst in ans :
    print(*lst)

 

참고

https://www.youtube.com/watch?v=2Z7t0Prt2ng