728x90
SMALL
from itertools import permutations
n = int(input())
k = int(input())
cards = [input() for _ in range(n)]
result = set()
for perm in permutations(cards, k):
result.add(''.join(perm))
print(len(result))
- itertools 모듈에 있는 combinations와 permutations 중 즉, 순열과 조합 중 어떤 것을 이용하여 푸는 것인지만 알고 풀이를 쓰다보면 파이썬으로는 금새 풀어낼 수 있는 문제입니다.
왜 이렇게 풀었을까?
- 처음에는 브루트포스로도 충분히 풀어낼 수 있는 입력 크기여서 반복문으로 접근해보다가 결국 쉬운 방법을 택하기로 했습니다...!
- combinations 즉, 조합을 이용하여 풀어보았는데 사실 조합은 중복을 고려하는 방법이기 때문에 모든 경우의 수를 판단하지 않았습니다.
- 예시 입력 1을 예로 들면 1, 2, 12, 1이 주어졌을 때, '122'와 같은 경우는 combinations가 잡아내지 못했습니다.
- 결국 기존 코드에서 combinations를 permutations로 수정하였더니 바로 풀어낼 수 있었습니다!
- 그 중에서도 같은 문자열인 경우에는 제거해야했기 때문에 set()을 사용하여 이를 처리하였습니다.
728x90
LIST
'알고리즘 문제 > 랜덤 마라톤 (solved.ac)' 카테고리의 다른 글
🥈 2303번: 숫자 게임 (0) | 2024.11.25 |
---|---|
🥈 3060번: 욕심쟁이 돼지 (2) | 2024.10.07 |
🥈 25329번: 학생별 통화 요금 계산 (0) | 2024.08.23 |
🥈 2740번: 행렬 곱셈 (2) | 2024.08.20 |
🥉 27961번: 고양이는 많을수록 좋다 (0) | 2024.08.19 |