[Programmers / Python / 해시] - 위장
출처 https://programmers.co.kr/learn/courses/30/lessons/42578
clothes_dict 을 만들어서 옷의 종류를 key로 설정.
어차피 옷의 이름이 중요한게 아니므로 value에는 해당 종류의 옷의 개수로 설정.
def solution(clothes):
answer = 0
clothes_dict = {}
for name, kind in clothes:
if kind in clothes_dict:
tmp = clothes_dict.get(kind)
clothes_dict[kind] = clothes_dict.get(kind) + 1
else:
clothes_dict[kind] = 1
for val in clothes_dict.values():
answer += val
if (val != 1) and (len(clothes_dict) !=1):
answer += val
return answer
수식 일반화를 잘못시킴...
def solution(clothes):
answer = 1
clothes_dict = {}
for name, kind in clothes:
if kind in clothes_dict:
clothes_dict[kind] = clothes_dict.get(kind) + 1
else:
clothes_dict[kind] = 1
for val in clothes_dict.values():
answer *= (val+1)
return answer-1
ex)
x:a개 y:b개 z:c개 일 때
a + b + c + ab + bc + ac + abc
결과값은 (a+1)(b+1)(c+1)-1
각 (value값+1)을 모두 곱하고 -1 하는거라는 수식을 구함
다른 사람의 풀이
collections의 Counter이용
from collections import Counter
from functools import reduce
def solution(clothes):
cnt = Counter([kind for name, kind in clothes])
answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
return answer
from collections import Counter
from functools import reduce
def solution(c):
return reduce(lambda x,y:x*y,[a+1 for a in Counter([x[1] for x in c]).values()])-1
정리
Counter(iterable)
from collections import Counter
해시 가능한 객체를 세기 위한 dict 서브 클래스
요소가 dict key로 저장되고 개수가 dict value로 저장
clothes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]
Counter([kind for name, kind in clothes]))
lambda
lambda 매개변수 : 표현식
lambda 매개변수: 식1 if 조건식 else 식2
reduce(함수, 순서형 자료)
from functools import reduce
반복 가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서 반환하는 함수
reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]) #15
Author And Source
이 문제에 관하여([Programmers / Python / 해시] - 위장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@everyyoung/Programmers-Python-해시-위장저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)