본문 바로가기
프로그래머스/2단계

(Python/LV2) 위장

by windy7271 2023. 4. 15.
728x90
반응형

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/42578

풀이 :

 

 

첫시도

dic = dict()
for (key, value) in clothes:
    if value in dic:
        dic[value].append(key)
    else:
        dic[value] = [key]
# dics = {value: [key] if value not in dic else dic[value] for key, value in clothes}
res = 0
num = []
for i in "headgear", "eyewear", "face" :
    if i in dic:
        res += len(dic[i])
        num.append(len(dic[i]))
if len(num) > 1 :
    res += reduce(lambda x, y: x * y, num)

테스트 코드 빼고 다 틀림

 

 

 

from functools import reduce
def solution(clothes):
    dic = {y : 0 for x, y in clothes}
    for i in clothes:
        dic[i[1]] += 1
    print(dic.values())

    return reduce(lambda x,y: x*y,[i+1 for i in dic.values()]) - 1

-1 해주는 이유 아무것도 안 입었을때 변수

ex) 1,2,x   이고 4,x 

일때 x x 일경우가 있으니 둘다 안입어서 하나 빼준다.

 

from functools import reduce
>>> reduce(lambda x, y: x + y, a)

변수 x,y 지정하고 x+y 값 리턴한다, a라는 순회가능한 리스트 담아준다.

 

만약  a= [1,2,3,4,5] 이면 15를 뽑아준다.

근데 1+2 도 출력하고 1+2+3 도 출력하고 ,,, 1+2+3+4+5 를 출력하고싶으면

 

a = [1,2,3,4,5]
print(reduce(lambda x,y : x+y, a))
for i in range(1, len(a) + 1):
    print(reduce(lambda x, y: x + y, a[:i]))

이런식으로 사용하면 된다.

 

반응형

댓글