코딩문제풀이/파이썬

[프로그래머스] 의상 (파이썬)

오늘밤공부 2023. 7. 7. 11:00
반응형

🗓️ 문제 설명

  • 코니는 매일 다른 옷을 조합하여 입는 것을 좋아합니다.
  • 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다.
  • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
  • 코니는 하루에 최소 한 개의 의상은 입습니다.
  • 코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 반환해주세요.
  • 제한 사항
    • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어짐
    • 코니가 가진 의상의 수는 1개 이상 30개 이하
    • 같은 이름을 가진 의상은 존재하지 않음
    • clothes의 모든 원소는 문자열로 이루어짐
    • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고, 알파벳 소문자 또는 '_'로만 이루어짐
  • 입출력 예시
clothes return
[['yellow_hat', 'headgear'], ['blue_sunglasses', 'eyewear'], ['green_turban', 'headgear']] 5
[['crow_mask', 'face'], ['blue_sunglasses', 'face'], ['smoky_makeup', 'face']] 3

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 4번줄 : Counter 함수를 통해 의상의 종류 내에 의상이 몇개가 있는지 계산하여 cnt에 저장
  2. 5번줄 : reduce를 통해 cnt의 value를 모두 곱해준 후 -1을 함
    1. lambda x, y : x*(y+1) = reduce에 적용할 함수로 기존 값에 (새로운 값 + 1)을 곱해주는 함수 
    2. reduce(lambda x, y : x*(y+1), cnt.values(), 1) = 1부터 시작해서 cnt의 values를 불러오면서 lambda 함수를 적용
      • 예시)
        cnt = {'a' : 2, 'b' : 3} 인 경우, 위 reduce를 사용하면
        첫 번째 연산 : 1 * (2 + 1) = 3
        두 번째 연산 : 3 * (3 + 1) = 12

 

반응형