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
반응형

+ Recent posts