문제 링크 : programmers.co.kr/learn/courses/30/lessons/42578
코딩테스트 연습 - 위장
programmers.co.kr
소스코드의 간결함을 위해 defaultdict를 사용했다.
처음에는 combinations을 이용해서 가능한 모든 의상 종류 조합에 대해서 하나하나 구했는데, 시간복잡도가 O(2^m)이 되어 시간초과가 발생했다.
찾아보니 밑에 소스코드와 같은 풀이가 가능했는데, 약간 고등학교 때 확통 문제를 푸는 듯 했다...
def solution(clothes): # 의상 수 : 1 <= n <= 30 # 의상 종류 수 : 1 <= m <= n answer = 1 type2count = defaultdict(int) # key: 종류, value: 종류 count # n + m = O(n) for _, cloth_type in clothes: type2count[cloth_type] += 1 keys = list(type2count.keys()) for key in keys: # 종류에 있는 의상 개수가 n개라면 해당 종류의 의상을 선택하는 경우의 수는 # (0개 선택), (1개 선택), ..., (n개 선택) ==> 총 n+1 경우 answer *= type2count[key] + 1 answer -= 1 # 모든 종류의 의상을 선택하지 않는 경우의 수를 뺌. return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 기능개발 (0) | 2021.04.14 |
---|---|
[프로그래머스] 주식가격 (0) | 2021.04.12 |
[프로그래머스] 전화번호 목록 (0) | 2021.03.26 |
[프로그래머스] - 완주하지 못한 선수 (0) | 2021.03.20 |
[프로그래머스] 단어 변환 (0) | 2021.02.05 |