[백준] 15663번 N과 M (9)

거북이·2023년 1월 26일
0

백준[실버2]

목록 보기
22/81
post-thumbnail

💡문제접근

  • permutations을 이용해서 간단하게 해결할 수 있었다.

💡코드(메모리 : 35032KB, 시간 : 100ms)

from itertools import permutations

import sys
input = sys.stdin.readline

N, M = map(int, input().strip().split())
A = list(map(int, input().strip().split()))
# 배열 A에서 M개를 뽑아서 만든 수열(이 때, 중복을 제거하기 위해 set사용)
A = set(permutations(A, M))
# 리스트 사용
A = list(A)

# 오름차순 정렬
A.sort()
for i in A:
    print(*i)

📌백트래킹 풀이 방법(메모리 : 31256KB, 시간 : 52ms)

import sys
input = sys.stdin.readline

N, M = map(int, input().strip().split())
li = list(map(int, input().strip().split()))
li.sort()
visited = [False] * N
res = []

def recursive():
    if len(res) == M:
        print(" ".join(map(str, res)))
        return
    else:
        flag = 0
        for i in range(len(li)):
            if not visited[i] and flag != li[i]:
                visited[i] = True
                res.append(li[i])
                flag = li[i]
                recursive()
                visited[i] = False
                res.pop()
recursive()

💡소요시간 : 3m

0개의 댓글