N과 M 6번과 크게 다르지 않다
N과M 6번을 보고싶으면? N과M(6) 보러가기
- 수열 내부 값이 비 내림차순이다. -> 원소들이 같거나 커지는 형태이다.
- 중복된 값들은 출력하지 않는다. -> 이를위해 중복된 값인경우 체크하여 출력하지 않는 방식 사용
출력이 비 내림차순이기 때문에 정렬 을 먼저 한 다음에 배열에서 순서대로 탐색한다.
재귀함수 를 이용하여 조건에 맞는 경우 정답배열에 한 개 씩 추가하여 배열 원소의 갯수가 M이 되는 경우에만 출력한다.
최종 출력시 중복된 값을 제거하기 위해 출력하는 수열에 대해 저장하는 배열을 만들고 출력시 배열에 존재하는 지 확인후 존재하지 않을 때만 출력한다.
# N과 M (10)
# N개중에 M개
# 비내림차순? => 같거나 커지는 순으로 간다
N,M=map(int,input().split())
lst=list(map(int,input().split()))
dup_check=[]
def solve(num,start,ans):
if len(ans)==num:
tmp=[lst[i] for i in ans]
if tmp in dup_check:
return
for i in ans:
print(lst[i],end=' ')
print()
dup_check.append(tmp)
return
for i in range(start+1,len(lst)):
solve(num,i,ans+[i])
lst.sort()
for i in range(N):
solve(M,i,[i])