코딩문제풀이/파이썬
[프로그래머스] 의상 (파이썬)
오늘밤공부
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번

- 4번줄 : Counter 함수를 통해 의상의 종류 내에 의상이 몇개가 있는지 계산하여 cnt에 저장
- 5번줄 : reduce를 통해 cnt의 value를 모두 곱해준 후 -1을 함
- lambda x, y : x*(y+1) = reduce에 적용할 함수로 기존 값에 (새로운 값 + 1)을 곱해주는 함수
- 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
- 예시)
반응형