날짜: 2022년 3월 11일 오후 12:58
코드
Algorithm/64064.py at main · Junroot/Algorithm
풀이
크게 두 가지 문제로 나눌 수 있다.
- 제재 아이디에 매칭되는 아이디들 구하기
- 나올 수 있는 아이디의 조합 구하기
1번 문제는 간단한 문자열 비교 문제니 설명하지 않겠다.
2번 문제를 해결하기 위해서 각 제재 아이디가 매칭될 수 있는 아이디의 인덱스를 저장해두고, 각 제재 아이디 별로 아이디를 하나씩 선택는 경우의 수를 구했다. 이때 아래의 두 가지 조건을 조심해야되는데 이를 놓쳤다.
- 각 제재 아이디가 선택한 아이디가 달라도 최종적인 아이디의 조합이 같다면 그는 같은 조합으로 취급해야된다.
- “_r_d*” → “frodo” & “*rodo” → “crodo”
- “_r_d*” → “crodo” & “*rodo” → “frodo”
- 하나의 제재 아이디에서 선택한 아이디는 다른 제재 아이디에서는 선택하지 못한다.
2번 조건은 조건문 하나를 추가해서 해결할 수 있었다.
1번 조건을 해결하기 위해서 현재 구한 조합 중에서 중복을 제거할 필요가 있었다. 이를 위해 나는 현재 사용한 아이디를 표시하는 비트맵을 만들어 조합이 완성되었을때 이 비트맵 값을 set에 추가하는 방식으로 해결했다.