프로그래머스_위장_python

2021. 7. 20. 00:16코딩테스트

반응형

 

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

  • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
  • 스파이는 하루에 최소 한 개의 의상은 입습니다.

 

from collections import defaultdict
def solution(clothes):
    answer = 1
    c_type = defaultdict(int) #값을 저장하지 않으면 0이 됨.
    
    for a, b in clothes:
        c_type[b] += 1
    
    for i in c_type:
        answer *= c_type[i]+1
    return answer-1

[내코드]

defaultdic - 존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성함.

종류당 한 항목에 3개 있다면 조합수는 3개(1번고르기, 2번고르기, 둘다 고르지 않기)

모든 종류를 고르지 않을 확률이 있기 때문에 결과에서 -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([kind for name, kind in clothes]) //Counter({'headgear': 2, 'eyewear': 1})

cnt.values //dict_values([2, 1])

reduce(function, iterable[, initializer]) - iterable을 단일 값으로 줄이기 위해 왼쪽에서 오른쪽 으로 iterable 항목에 두 인수의 함수 를 누적 적용 합니다

 

lambda x,y : x*(y+1) 

lambda 인자 : 표현식

function(x,y){

 return x*(y+1);

}

반응형