[백준] 15655번 (python 파이썬) N과 M(6)

2021. 3. 23. 03:07발돋움/알고리즘

728x90
반응형

 

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

n_list = sorted(map(int, input().split()))

def num(idx, n, m, check):
    if idx == m:
        print(' '.join(map(str,a)))
    for x in n_list:
        if (idx != 0) & (check >= x):
            continue
        a.append(x)
        num(idx + 1, n, m, x)
        a.pop()

a = []
num(0, n, m, n_list[0])
728x90

* 받을때 오름차순으로 정렬해준다.

* 문제의 입,출력 예시를 잘보면 앞의 인덱스보다 뒤의 인덱스 값이 커야함

* idx는 수열의 길이로 m개를 골랐을때 join으로 공백을 넣어 출력해준다.

* 함수의 두번째 if문을 보면 idx != 0과 check >= x조건이 있는데

  check >= x는 중복방지,

  idx != 0는 num함수를 처음 실행할때 리스트의 첫 객체를 넣어줬기 때문에 첫 실행때 중복에서 걸러짐 방지이다.

  list의 객체와 str(혹은 int)끼리 비교 연산이 불가하여 에러가 난다.

  변수로 담아줘도 똑같음

  그렇기 때문에 num함수를 처음 실행할때 리스트의 첫 값을 넣어줬다.

* 받을때 int로 변환해주지 않으면 1241과 13을 입력시 ['1241', '13']처럼 잘못 정렬된다. 

 

 

 

* 재귀함수 작동원리가 이해가 안간다면 아래를 참고(알아보기 힘들 수 있음)!

 

백준 15651 python ,N과M(3)

n, m = map(int, input().split()) result = [] def num(idx, n, m): if idx == m: print(' '.join(map(str, result))) return for i in range(1, n + 1): result.append(i) num(idx + 1, n, m) result.pop() num..

happytum.tistory.com

 

728x90
반응형