본문 바로가기

알고리즘/백준

[BOJ] [Python] 5568번 : 카드 놓기

N개의 카드 중에서 K장을 선택한다.

K장을 나열해서 만들 수 있는 정수는 모두 몇 가지인지 구하는 문제이다.

 

 

n = int(input())
k = int(input())

card = []
dp = [0] * n

result = 0

for _ in range(n):
    card.append(int(input()))

string = ''
result = set()


def select(cnt):
    global string

    if cnt == k:
        result.add(string)
        return

    for i in range(n):
        if dp[i] == 0:
            dp[i] = 1

            tmp = str(card[i])
            string += tmp

            select(cnt + 1)

            dp[i] = 0
            string = string[:-len(tmp)]


select(0)
print(len(result))

 

재귀 함수를 이용했다.

k개를 선택할 수 있는 모든 경우의 수를 확인하면서, 그에 따라 나열할 수 있는 수를 만들어줬다.

 

set을 이용해서 중복처리를 했다.