백준 15664 파이썬

강한개발자·2021년 9월 26일
0

코딩왕이 되기 위해

목록 보기
11/15

문제

N 과 M (10)

백준 15664

풀이

N과 M 6번과 크게 다르지 않다

N과M 6번을 보고싶으면? N과M(6) 보러가기

  1. 수열 내부 값이 비 내림차순이다. -> 원소들이 같거나 커지는 형태이다.
  2. 중복된 값들은 출력하지 않는다. -> 이를위해 중복된 값인경우 체크하여 출력하지 않는 방식 사용

출력이 비 내림차순이기 때문에 정렬 을 먼저 한 다음에 배열에서 순서대로 탐색한다.
재귀함수 를 이용하여 조건에 맞는 경우 정답배열에 한 개 씩 추가하여 배열 원소의 갯수가 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])

결과 정답

profile
강한친구의 코딩 성장기

0개의 댓글