백준 #15654:N과M(5)/ 실버3

📤결과

초반에 중복 제외한 순열들로만 출력하는 줄 알아 , 코드를 구현하였고, 틀렸다. 사실 그보다 더 쉬운 , N개 중 m개의 원소들로만 이루어진 결과만 출력하면 되었다.

image.png

🚩플로우 (선택)

코드를 풀이할 때 적었던 플로우가 있나요?

  1. 입력 변수 선언 및 초기화 하기

  2. n개 수열 원소 후보군 오름차순 정렬하기

  3. 순열 재귀 함수

    elements 1 7 8 9
    check 0 0 0 0
    def fun (m) # m : result 안에 들어가있는 원소 개수 = 넣을 위치
        if m == M : # result  개수 같으면 = 재귀 종료 조건
            print(*result) # 출력
        else : 
            for i in range(N) : # 더 뽑아야 하면 , N 개 후보군 중에 확인
                if check[i] == 0 : #현재 후보원소(i) 사용 가능함
                    result[m] = elements[i] # result에 등록
                    check[i] = 1 # 사용중
                    perm(m+1) # result 에 m+1 개 들어가 있음
                    check[i] = 0  # 사용 완료
    
    idx 0 1 check 현황
    result 1 7 [1 1 0 0]
    1 8 [1 1 1 0]
    1 9 [1 1 1 1 ] 재귀 종료
    7 1 [1 1 0 0]
    7 8 [1 1 1 0]
    7 9 [1 1 1 1 ] 재귀 종료
    8 1 [1 0 1 0]
    8 7 [1 1 1 1 ]
    8 9 [1 1 1 1 ]
    9 1 [ 1 0 0 1 ] 재귀 종료
    9 7 [ 1 1 0 1 ]
    9 8 [1 1 1 1 ]

🚩제출한 코드

import sys

#0. 입력 받기 
N , M = map(int, sys.stdin.readline().split())
# M개의 수열 결과를 저장할 배열
result = [0 for _ in range(M)]
# 해당 원소 사용 여부 check 함수
check = [0 for _ in range(N)]
# n 개 수열 원소 후보군 저장하는 리스트
elements = list(map(int, sys.stdin.readline().split()))
#오름 차순 정렬 for 오름차순 결과 출력
elements.sort()
# print(elements)

# 1. m 개 수열 찾기 by 재귀 함수
def perm(m) : # m : result 안에 들어가있는 원소 개수 = 넣을 위치
    if m == M : # result  개수 같으면 = 재귀 종료 조건
        print(*result) # 출력

    else : 
        for i in range(N) : # 더 뽑아야 하면 , N 개 후보군 중에 확인
            if check[i] == 0 : #현재 후보원소(i) 사용 가능함
                result[m] = elements[i] # result에 등록
                check[i] = 1 # 사용중
                perm(m+1) # result 에 m+1 개 들어가 있음
                check[i] = 0  # 사용 완료

perm(0 )

💡TIL

배운 점이 있다면 입력해주세요

  1. * 의 기능 : 튜플 , 리스트 unpacking

  2. 재귀 함수

    def fun(n) :
        if  재귀종료 조건 
        else : 
    	    재귀로 다음 스테이지로 넘어가기 전에 실행하는 코드
    	    fun(n+-1) # 재귀
    	    이전 재귀 함수의 재귀종료 조건 종료 후 실행할 코드 
    

3. 순열 및 조합을 내장 함수(itertools)을 사용하지 않고 구현하기 by 재귀함수