Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- api gateway 설계
- api gateway 필터
- ApplicationEvent
- argocd
- assertThat
- async/await
- AVG
- AWS
- aws autoscaling
- aws eks
- aws iam role
- AWS KMS
Archives
- Today
- Total
기록
[programmers/python] 의상 - collections.Counter 본문
문제
- url : https://school.programmers.co.kr/learn/courses/30/parts/12077
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
위처럼 여러 의상 종류가 있고 각 종류별로 여러 개의 아이템이 존재할 수 있다. 각 종류에서 한 가지씩만 착용 가능하며, 입거나 안 입을 수 있다. 단, 아무것도 입지 않는 경우는 제외한다.
접근 방식
이 문제는 조합의 수를 묻고 있지만, 단순한 조합이 아닌 종류별 선택의 경우의 수를 곱해서 구하는 방식으로 해결할 수 있다.
종류가 N개일 때:
(종류1 개수 + 1) × (종류2 개수 + 1) × ⋯ × (종류N 개수 + 1) - 1
여기서 +1은 해당 종류의 옷을 "입지 않는 경우"를 포함한 것이다.
마지막에 -1을 하는 이유는 전부 안 입는 경우(공집합)를 제외하기 위함이다.
Python 코드
from collections import Counter
def solution(clothes):
_counter = Counter([kind for _, kind in clothes])
ans = 1
for i in _counter.values():
ans *= (i + 1)
return ans - 1
설명
- Counter를 통해 각 종류별 의상 개수를 구한다.
- 각 종류에서 (의상 수 + 1)만큼의 선택지를 가진다.
- 예: 얼굴(2개) → [선택1, 선택2, 안 입음] → 3가지
- 모든 종류의 선택지를 곱한다.
- 아무것도 입지 않는 조합을 제외하기 위해 마지막에 1을 뺀다.
예시
solution([
["yellow_hat", "headgear"],
["blue_sunglasses", "eyewear"],
["green_turban", "headgear"]
])
# 출력: 5
- headgear: 2개 → 3가지 선택 (2 + 1)
- eyewear: 1개 → 2가지 선택 (1 + 1)
- 전체 조합: 3 × 2 = 6 → 전부 안 입는 경우 제외 → 6 - 1 = 5
'코딩테스트 > python' 카테고리의 다른 글
[programmers/python] - 더 맵게, 힙(Heap) (0) | 2025.05.25 |
---|---|
[programmers/python] 베스트앨범 (defaultdict 활용) (0) | 2025.05.24 |
[programmers/python] 전화번호부 접두어 - 정렬 vs 해시맵 (0) | 2025.05.24 |
[programmers/python] 폰켓몬 - 최대한 다양한 종류 고르기, Set (0) | 2025.05.24 |
[programmers/python] 마라톤 완주자 찾기 - collections.Counter (0) | 2025.05.24 |
Comments