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을 이용해서 중복처리를 했다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] [Python] 11663번 : 선분 위의 점 (0) | 2021.09.15 |
---|---|
[BOJ] [Python] 10815번 : 숫자 카드 (0) | 2021.09.15 |
[BOJ] [Python] 2422번 : 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (2) | 2021.08.27 |
[BOJ] [Python] 15686번 : 치킨 배달 (0) | 2021.08.27 |
[BOJ] [Python] 14502번 : 연구소 (0) | 2021.08.26 |