반응형
def solution(clothes):
count={}
answer=0
for i in clothes:
try: count[i[1]] += 1
except: count[i[1]]=1
for i, value in enumerate(count.items()):
value = list(value)
if value[1] >= 2 and len(count.keys()) >= 2:
value[1] *= value[1]
elif value[1] >=2:
pass
else:
value[1] = 1
answer = answer + value[1]
return answer
테스트 케이스에서 다 맞길래 채첨했는데
채점 결과
정확성: 10.7
합계: 10.7 / 100.0
ㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂ
또 답을 봤다.
베스트 답안1)
def solution(clothes):
from collections import Counter
from functools import reduce
cnt = Counter([kind for name, kind in clothes])
answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
return answer
Counter 객체를 사용하여 데이터를 담는다
cnt 출력)
Counter({'headgear': 2, 'eyewear': 1})
의상 종류의 수(2, 1) 데이터만 사용
cnt.values() 출력)
dict_values([2, 1])
람다식을 이용하여 의상종류수 값만 이용하여 순차적으로 더해준다
x=2, y=1 -> 2 * 2 = 4
x=1, y=1 -> 1 * 1 = 2
( 4 + 2 = 6 ) - 1 = 5
경우의 수 풀이 방식 -> 3 * 2 - 1 = 5
베스트 답안2)
def solution(clothes):
clothes_type = {}
for _, t in clothes:
if t not in clothes_type:
clothes_type[t] = 2
else:
clothes_type[t] += 1
cnt = 1
for num in clothes_type.values():
cnt *= num
return cnt - 1
내가 이해하기 위해 그나마 나랑 비슷한걸 뽑아봤다.
이것마저 이해가 안가서 print문을 찍어봤다
def solution2(clothes):
clothes_type = {}
for c, t in clothes:
print(c, t)
if t not in clothes_type: #만약에 t가 딕셔너리 안에 존재하지 않는다면 t= headgear, eyewear, headgear
clothes_type[t] = 2
print("첫번째 if")
print(clothes_type)
else:
print("두번째 if")
print(clothes_type)
clothes_type[t] += 1
cnt = 1
for num in clothes_type.values():
cnt *= num
return cnt - 1
결과)
yellowhat headgear
첫번째 if
{'headgear': 2}
bluesunglasses eyewear
첫번째 if
{'headgear': 2, 'eyewear': 2}
green_turban headgear
두번째 if
{'headgear': 2, 'eyewear': 2}
{'headgear': 3, 'eyewear': 2}
경우의수 풀때처럼 접근을 하면 (의상 종류 + 1)!
위의 경우 2가지기 때문에 (2 + 1)! = 3*2 = 6
다만 의상 종류가 1개일땐 그대로 값이 나오게 출력한거같다.
반응형