RUBY

[프로그래머스] 위장 본문

PS/Programmers

[프로그래머스] 위장

RUBY_루비 2020. 10. 23. 23:59

출처:: programmers.co.kr/learn/courses/30/lessons/42578?language=python3

분류:: 해시  

 

1. 문제 이해 및 해결과정

 1) 해시

1. dict= {'옷의 종류' : '옷1','옷2' } 형태로 담는다
2. 경우의 수는 [각 종류별로 있는 옷의 수 + 1 (그 옷을 선택하지 않는 경우) ] 를 각 종류 마다 곱해주고 모두 선택되지 않는 경우는 없으므로 -1을 해준다
-> 모자 종류:2 목거리:3 상의:4 라고 가정하면, 
( 2+1 ) * ( 3 + 1) * ( 4 +1 ) = 3*4*5 - 1(모두선택하지않을 때) 로 계산하면 된다 

 

 

2. 풀이방법

 1. [python] 해시

- dict => 옷의 종류 : 옷 1, 옷2 

def solution(clothes):
    dict={}
    result=1 #가능한 옷 조합 수 
    #옷의 종류별로 옷 이름을 담는다
    for cloth,kind in clothes:
        if kind in dict:#이미 있는 종류라면
            dict[kind].append(cloth)
        else:#처음 나오는 종류라면 
            dict[kind]=[cloth] #[]로 감싸서 넣어야 한다
            
    for kind in dict.keys(): #가능한 옷의 조합 수 
        result= result*(len(dict[kind])+1) 
    result-=1
    
    return result

 2. [python] 해시

- 1번 풀이에 처음부터 종류별 개수를 만들어 놓는 경우

- dict => 옷의 종류별 개수

def solution(clothes):
    cnt={} #옷의 종류별로 개수를 담는 딕셔너리
    result=1 
    for cloth,kind in clothes:
        if kind in cnt: #이미 있는 종류라면
            cnt[kind]+=1
        else: #처음 나오는 종류인 경우 
            cnt[kind]=1
    for x in cnt.values(): # 종류별로 개수에 선택하지 않을 경우(1)을 더해서 곱한다 
        result*=(x+1)
    result-=1 #아무것도 선택하지 않는 경우
    return result

3. [python] reduce 함수 이용

from collections import Counter #리스트 값을 딕셔너리 형태로 반환
from functools import reduce
def solution(clothes):
    cnt = Counter([kind for name, kind in clothes]) #종류의 개수를 딕셔너리 형태로 저장 
    result=reduce(lambda x,y : x*(y+1),cnt.values(),1)-1 #입력받은 타입을 지정한 함수에 따라 계산하고 단일값으로 반환한다 
    return result

 

3. 오답원인

-딕셔너리는 [] 형태로 넣어야한다 dict[key]=value 로 넣으면 안된다 

dict[key]=[value] 

 

4. 알게된 점

dict() : 딕셔너리 이용하기
dict[key] = value 

- 위의 코드는 같은 key에 value가 중복되면 그 key에 새로운 value가 추가되는 것이 아니라 덮어씌어진다

1. 처음 나오는 키라면
dict[key]=[value]  #틀을 만들어 주고

2. 이미 key가 존재한다면
dict[key].append(value) 

 

reduce(함수, 순서형 자료, 초기값)
from functools import reduce

reduce(lambda x,y : x+y,[1,2,3,4,5])
#((((1+2)+3)+4)+5) => 15

reduce(함수 or lambda함수 , 순서형자료, [초기값] ) 
Comments