Python(프로그래머스)/해시
list(map(lambda x : x[1] , 리스트)) ==> 2중 리스트 뒤에값★VER2.0★zip★reduce★위장[프로그래머스]
goAhEAd_29
2023. 1. 2. 23:29
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
VERSION 2.0
import collections
import itertools
def solution(clothes):
b = collections.Counter(list(map(lambda x : x[1] , clothes)))
answer = 1
for i in list(b.values()):
answer *= i+1
return answer -1
==> eyewear : 2 , headgear : 1
==> answer*= (2+1) -> answer *= (1+1)
VERSION 1.0
from collections import Counter
from functools import reduce
def solution(clothes):
# 1. 의상 종류별 Counter를 만든다.
counter = Counter([type for clothe, type in clothes])
print(counter)
# 2. zip 함수를 통하여 counter 값 구할수도 있다.
print("애스터리스크 : {}".format(*clothes))
print("애스터리스크 with zip: {}".format(list(zip(*clothes))))
counter_2 = Counter(list(zip(*clothes))[1])
print(counter_2)
# 3. 모든 종류의 count + 1을 누적하여 곱해준다
answer = reduce(lambda acc, cur: acc*(cur+1), counter_2.values() , 1) - 1
#acc 매개변수에는 counter_2의 value 값들 , cur 매개변수에는 1을
#reduce 함수는 반복 가능한 객체 내 각 요소를 연산한 뒤 이전 연산 결과들과 누적해서 반환해 주는 함수이다.
#counter_2.values()에는 ==> 2, 1 ==> 2*(1+1) + 1*(1+1) - 1 = 5
#ex) target = [i for i in range(1,22)]
# answer = reduce(lambda x, y : x+y , target) ==> 1+2 +3 + 4 + 5 +..... ==> 누적값 반환
return answer
1. *clothes ==> 애스터리스크로 list안의 list들 빼온다.
2. zip()함수를 통해 ==> list안의 값들 요소에 맞게 정리
3.reduce 함수는 누적해서 곱하는 함수
4. 누적함수를 쓰는 이유는
계산한 count를 통해서 (count+1)를 곱해주고 마지막에 1을 빼줌
- 1을 빼주는 이유는 모두 안입은 경우를 제거
728x90
반응형