테스트 1에 대해 시간 초과난 코드.
def solution(clothes):
c_dict = {}
for c in clothes:
if c[1] in c_dict:
c_dict[c[1]] += 1
else:
c_dict[c[1]] = 1
c_list = []
for i in c_dict:
c_list.append(c_dict[i])
result = 0
length = len(c_list)
n = 2 ** length
for i in range(1, n):
bin_n = format(i, 'b').zfill(length)
multi_result = 1
for j in range(length):
num = int(bin_n[j])
if num != 0:
multi_result *= c_list[j] * num
result += multi_result
return result
바보같이 전체 경우의 수에서 하나도 안고른 경우를 빼면 되는건데... 삽질을 했다.
전체 경우의 수 - 1을 하면 된다.
모자가 3개, 바지가 4개라고 할 때,
모자의 경우 입지 않은 경우를 포함하면 4개다.
바지의 경우 입지 않은 경우를 포함하면 5개다.
총 나올 수 있는 조합은 4 x 5 = 20인데 여기서 하나도 입지 않는 경우는 빼야하므로 결국 19개의 경우가 나온다.
다시 푼 코드
def solution(clothes):
c_dict = {}
for c in clothes:
if c[1] in c_dict:
c_dict[c[1]] += 1
else:
c_dict[c[1]] = 1
c_list = []
length = 0
for i in c_dict:
length += 1
c_list.append(c_dict[i])
result = 1
for j in c_list:
result *= (j + 1)
return result - 1
출처 https://programmers.co.kr/learn/courses/30/lessons/42578
'알고리즘 문제' 카테고리의 다른 글
프로그래머스 모의고사 (0) | 2019.08.29 |
---|---|
프로그래머스 베스트 앨범 (0) | 2019.08.28 |
프로그래머스 전화번호 목록 (0) | 2019.08.28 |
프로그래머스 완주하지 못한 선수 (0) | 2019.08.27 |
백준 2775번 부녀회장이 될테야 (0) | 2018.11.04 |