본문 바로가기

CodingTest/백준알고리즘BOJ

백준알고리즘python_N과M(9)

def DFS(L, val):
    if L == m :
        print(' '.join(map(str,res)))
        return
    else:
        # 같은 DFS 레벨 상에서, 같은 값이 들어가는 것을 방지 ex. 1, 9 이후, 또 1,9 가 들어가는 것 방지
        # arr은 sort되어 있다. 즉, 앞에서부터 1, 7, 9, 9 이런식으로 arr이 들어온다
        # 만약 앞의 9가 한번 쓰였고, 그 다음 9에 접근할 때, overlap != arr[i] 에 걸려서 넘어가게 된다
        # ( 질문 : 1 9 7 9  > 이런식이면 overlap은 의미없는 거잖아  ???  > 그래서 아래서 arr.sort() 해준  거라고 ;;)
        overlap = 0
        for i in range( n ):
            # 체크 안된애만 들어간다
            if ch[i] == 0 and overlap != arr[i]:
                #체크 표시
                ch[i] = 1
                # 배열에 넣기
                res[L] = arr[i]
                # 같은 L 상에서, 중복 요소 사용제거
                overlap = arr[i]
                # DFS
                DFS( L + 1 , i + 1)
                # 다시 체크 해제
                ch[i] = 0 

if __name__ == "__main__" :
    
    n,m = map(int,input().split())

    arr = list(map(int,input().split()))
    ch  = [0] * (n+1)
    res = [0] * m
    arr.sort()

    DFS(0,0)