이해
- 스파이는 매일 다른 옷을 조합하여 입어 자신을 위장한다.
- 스파이가 가진 옷들이 아래와 같을 때
- 머리: 노란 모자, 빨간 모자
- 얼굴: 선글라스
- 스파이가 입을 수 있는 서로 다른 옷의 조합은 다음 아래와 같이 5개의 조합이 가능하다.
- 노란 모자
- 빨간 모자
- 선글라스
- 노란 모자, 선글라스
- 빨간 모자, 선글라스
- 스파이가 가진 의상들이 담긴 2차원 배열이 주어질 때 서로 다른 옷의 조합의 수를 return하라.
계획
- 딕셔너리를 선언하여 종류: [이름1, 이름2, …]와 같은 key: value 형태로 저장한다.
- 의상의 종류가 총 n가지, n가지 종류에 대한 각 의상의 수가 x1, x2, …, xn이라고 할 때
- 서로 다른 옷의 조합의 수 = (x1 + 1) * (x2 + 1) * ... * (xn + 1) - 1
- -1을 해주어 아무 의상도 입지 않은 경우를 제외시켰다.
실행
def solution(clothes):
cloth_dic = dict()
for cloth, kind in clothes:
if kind not in cloth_dic.keys():
cloth_dic[kind] = [cloth]
else:
cloth_dic[kind].append(cloth)
result = 1
for values_arr in cloth_dic.values():
result *= len(values_arr) + 1
return result - 1
개선
- 딕셔너리에 종류: 의상의 개수의 형태로 저장하여 파이썬의 내장 함수(append, len)를 사용하지 않고 구현이 가능하다.
- 딕셔너리의 key 값에 대해 for문을 돌릴 때는 딕셔너리의 내장 함수인 keys() 함수를 사용할 필요가 없다.
def solution(clothes):
cloth_dic = dict()
for cloth, kind in clothes:
if kind not in cloth_dic:
cloth_dic[kind] = 1
else:
cloth_dic[kind] += 1
result = 1
for value in cloth_dic.values():
result *= value + 1
return result - 1
회고
- 쉬웠다.