데이터사이언스 기록기📚

[프로그래머스] Level2_위장(해시) 본문

Coding Test/프로그래머스(Python)

[프로그래머스] Level2_위장(해시)

syunze 2022. 9. 24. 14:06

📌문제유형

해시

 

📌문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌문제풀이

1차시도(10.7)
def solution(clothes):
    answer = 0
    
    answer = len(clothes)
    clothes_dict = {clothes[i][1] : clothes[i][0] for i in range(len(clothes))}
    
    if len(clothes_dict) == 1:
        return answer
    else:
        answer += len(clothes_dict)
        return answer
2차 시도(통과)

 - Counter로 의상 종류별로 개수 세기

  •  예제 1 counter 이용 예시) {'headgear' : 2, 'eyewear' :1}

 - clothes_dict.values()를 이용하여 value값들만 list 만들기

  •  조합의 개수 생각 -> 0인 경우도 포함하여 num에 +1

 - 의상 종류가 모두 0인 경우 제외

 

파이썬 collections 모듈의 Counter 사용법

Engineering Blog by Dale Seo

www.daleseo.com

from collections import Counter

def solution(clothes):
    answer = 1
    
    # 의상 종류별로 개수 세기
    clothes_dict = Counter(clothes[i][1] for i in range(len(clothes)))
    
    # +1은 0을 포함해서 조합의 개수 count
    for num in clothes_dict.values():
        answer *= (num+1)
    
    return answer - 1       # 모두 개수가 0인 경우 1개 제외

 

📌다른사람들의 문제풀이

reduce를 이용한 문제풀이

 - reduce : (반복 가능한 객체 내 요소) 현 요소를 연산한 뒤 이전 연산들과 결과를 누적해서 반환

  • reduce(집계 함수, 순회 가능한 데이터, 초기값) 
    • 집계 함수 : lambda, 순회 가능한 데이터 : cnt.values(), 초기값 : 1
  •  예시) [1,2,3,4] -> ((1+2) +3) +4 형태로 for문 필요 없이 누적 연산 가능
 

파이썬 reduce 함수 사용법

Engineering Blog by Dale Seo

www.daleseo.com

 

[파이썬] reduce 함수에 대해 알아보자(feat. lambda 표현식)

오늘은 reduce 함수에 대해 알아봅니다. reduce 함수와 람다 표현식을 함께 사용하면 코드를 간결하고 직관적으로 작성하는 데 큰 도움이 됩니다. 람다 표현식에 대한 포스팅은 아래 링크를 참고해

heytech.tistory.com

from collections import Counter
from functools import reduce

def solution(clothes):
    cnt = Counter([kind for name, kind in clothes])
    answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
    return answer
해시

-  for문 이용하여 의상 종류별로 개수 세기

  • 0일 경우도 포함하여 초기값 생성 시 2 대입

 - 리스트값 곱한 후 1제외 

def solution(clothes):
    clothes_type = {}

    for c, t in clothes:
        if t not in clothes_type:
            clothes_type[t] = 2
        else:
            clothes_type[t] += 1

    cnt = 1
    for num in clothes_type.values():
        cnt *= num

    return cnt - 1

 

📌리뷰

 - 이중 리스트 개수 세기 : collections counter 이용, 리스트 순회

 - 조합 : 해당 항목을 직접 조합을 만들지 말고, 수학식 생각하고 접근하기

 

728x90
Comments