본문 바로가기
알고리즘/해시

#25 [파이썬] 프로그래머스: 위장

by 채채씨 2021. 6. 28.
728x90
반응형

<문제>

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

 

코딩테스트 연습 - 위장

 

programmers.co.kr


 

<소스코드>

첫번째 풀이

def solution(clothes):
    answer = 0
    dic = {}
    for name, categroy in clothes:
        if category not in dic:
            dic[category] = 1
        else:
            dic[category] += 1
    
    a = 1
    for i in dic.values():
        a *= (i + 1)
    
    answer = a - 1
    return answer

 

두번째 풀이

import collections

def solution(clothes):
	answer = 1
    category = []
    
    for i, j in clothes:
    	category.append(j)
        
    dic = collections.Counter(category)
    
    for i in dic.values():
    	answer *= (i + 1)
        
    return answer - 1

 

<NOTE>

리스트나 딕셔너리 같은 container의 개수에 대한 정보가 필요할 때

import collections

lst = ['banana', 'banana', 'apple', 'apple', 'apple']

count_lst = collections.Counter(lst)

print(count_lst) #{'banana': 2, 'apple': 3}

import collections를 통해 collections.Counter() 함수를 사용할 수 있다. 리스트 내의 요소를 key로 하고, 중복되는 개수를 value로 하여 dictionary형태로 반환한다.

 

 

■ 파이썬 자료구조 중 dictinary를 사용할 때, key에 대한 value가 없는 경우 효율적으로 처리할 수 있는 방법

1) setdefault

lst = ['banana', 'banana', 'apple', 'apple', 'apple']
dic = {}

for i in lst:
	dic.setdefault(i, 0)
    dic[i] += 1

해당 값이 dictionary에 없을 때, 그 값을 key로 만들어 주는 상황이 많다. 이 때, 그 key에 대한 value를 0으로 채우곤 한다. 그 대신 setdefault함수를 이용하여 dicionary에 setdefault(key, value)를 설정하면 dictionary안에 해당 key가 없으면 key:value 쌍으로 저장한다. 그러나 setdefault는 key의 여부와 상관없이 호출되므로 이를 개선하기 위해 collections모듈의 defaultdict클래스를 사용할 수 있다.

 

 

2) collections.defaultdict(int/list/등)

import collections

lst = ['banana', 'banana', 'apple', 'apple', 'apple']
dic = collections.defaultdict(int)

for i in lst:
	dic[k] += 1

collections.defaultdict는 dictionary자체가 key의 value가 default로 들어가있기 때문에, value가 없어도 에러를 출력하지 않고 default값을 출력한다. for문을 통해 dictionary안에 해당 값 없을 경우, 그 값을 key로 만들어주는 작업이 통째로 사라지므로 setdefault보다 빠르다. collections.default(int)에서 int외에 list등 value가 될 수 있는 다른 자료형을 지정할 수 있다.

728x90
반응형

'알고리즘 > 해시' 카테고리의 다른 글

#6 [파이썬] 프로그래머스 완주하지 못한 선수  (0) 2021.04.05

댓글