코딩 테스트

[코딩테스트] 프로그래머스 : 위장, Counter 사용법

디벨로펄 2022. 11. 30.
반응형

의상의 조합을 찾는 문제.

상의 : 셔츠, 티, 아우터

하의 : 바지, 치마, 칠부

와 같이 있다면, 총 조합의 수는 ('상의 수'+1) * ('하의 수' + 1) -1

현재 python의 문법을 잘 모르기에 차근차근 풀어보았다. 매우 쉽긴하다..

먼저, dict에 list로 담아서 풀어 보았다.

def solution(clothes):
    size = len(clothes)
    dict = {}
    for i in range(size) :
        clothe = clothes[i]
        if clothe[1] in dict:
            dict[clothe[1]].append(clothe[0])
        else:
            dict[clothe[1]] = [clothe[0]]
    answer = 1
    for key in dict:
        print(dict[key])
        answer*=(len(dict[key])+1)
    return answer-1

dictionary에 담긴 내용을 print로 확인 

['yellow_hat', 'green_turban']
['blue_sunglasses']

list로 저장하는 것보다는 의상의 갯수를 바로 더하는 것이 더 빠를터이다.

 

def solution(clothes):
    size = len(clothes)
    dict = {}
    for i in range(size) :
        clothe = clothes[i]
        if clothe[1] in dict:
            dict[clothe[1]]+=1
        else:
            dict[clothe[1]] = 1
    answer = 1
    for key in dict:
        answer*=dict[key]+1
    return answer-1

Counter : 데이터 개수 셀 때 유용한 클래스!

별도 패키지 설치 없이 파이썬만 설치되어 있으면 사용가능.

from collections import Counter

counter = Counter(["abc","abc","bcd","bcd","bc","d"]) // Counter({'abc': 2, 'bcd': 2, 'bc': 1, 'd': 1})

[name for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]
## ['yellow_hat', 'blue_sunglasses', 'green_turban']

[kind for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]
## ['headgear', 'eyewear', 'headgear']

=> 의상 별 개수를 세고 싶다. 

Counter([kind for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]])
# Counter({'headgear': 2, 'eyewear': 1})

=> 마지막으로 (2+1)* (1+1)-1 계산이 필요하다.

기본적인 for문 사용

j=1
for i in Counter([kind for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]).values():
    j*=(i+1)
j-=1

reduce 활용.

j = reduce(lambda x,y: x*(y+1), Counter([kind for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]).values(),1)

 

최종코드

def solution(clothes):
	from collections import Counter
    from functools import reduce
    counter=Counter([kin for name, kind in clothes])
    answer = reduce(lambda x,y :x*(y+1), counter.values(), 1)-1
    return answer

 

반응형

댓글