[프로그래머스/Python] 해시 - 위장

Sujin Lee·2022년 3월 25일
0

코딩테스트

목록 보기
3/172
post-thumbnail

🤓 풀이

def solution(clothes):
    answer = {}
    # {'headgear': 2, 'eyewear': 1}
    for i in clothes:
        if i[1] in answer: 
            answer[i[1]] += 1
        else: 
            answer[i[1]] = 1
    cnt = 1
    for i in answer.values():
        cnt *= (i+1)
    return cnt - 1
  • 문제에 조합이라는 단어가 많길래 무조건 combinations써야하는 줄..
  • (i+1): 해당 종류의 옷을 안 입을 때의 경우(1)를 더해준 것
  • cnt - 1: 아무것도 안 입었을 때의 경우(1)를 뺀 것

👩🏻‍🏫 다른 풀이

def solution(clothes):
    from collections import Counter
    from functools import reduce
    # Counter({'headgear': 2, 'eyewear': 1})
    cnt = Counter([kind for name, kind in clothes])
    answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
    return answer

✏️ Python 문법

Counter(~)

  • 파이썬에서 제공하는 collections 모듈의 Counter 클래스
  • 문자열이나, 리스트의 요소를 카운팅하여 많은 순으로 딕셔너리 형태로 리턴
from collections import Counter

list = ['kim', 'kim', 'park', 'choi', 'kim', 'kim', 'kim', 'choi', 'park', 'choi']
result = collections.Counter(list) 
print(result) # Counter({'kim': 5, 'choi': 3, 'park': 2})

reduce

  • 파이썬의 functools 내장 모듈의 reduce() 함수는 여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해서 사용
  • reduce(집계 함수, 순회 가능한 데이터, 초기값)

lambda

  • 이름이 없는 함수
  • 장점: 코드의 간결함 메모리의 절약
  • lambda 매개변수 : 표현식
from functools import reduce
result = reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
print(result) # 10

한줄평: 잠깐 올라갔던 자존감 내려갔쥬?

profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글