코딩 테스트/프로그래머스
[Python] 프로그래머스 lv.2 의상
위시리
2024. 11. 25. 19:05
문제 해석
- 매일 다른 옷 조합 : 최소 1개는 달라야함
- 각 종류별로 최대 1가지 의상만 입을 수 있음
- 하루 최소 한 개의 의상은 입음
- 서로 다른 옷의 조합의 수 return
코드 설계
입력 : 각 종류를 key로 해서, 값을 해당 키에 넣기- : 각 키에는 하나의 값만 들어갈 수 있음 → 하나의 리스트로 만들어서 넣으면 됨
1 ~ 전체 옷의 종류 수 : 하루 입는 옷의 가지 수의 경우의 수 r전체 종류 중 r개를 고르고, 각 r개에서 나올 수 있는 조합 선택
실패
정답 코드
다른 사람 코드 1
def solution(clothes):
answer = 0
closet = {}
for name, kind in clothes:
if kind in closet.keys():
closet[kind] += [name]
else :
closet[kind] = [name]
# a의 종류가 n개, b의 종류가 m개일 때 가능한 모든 경우의 수 (n+1)(m+1)
answer = 1
for _, value in closet.items():
print(value)
answer *= len(value)+1 # (n+1)(m+1)
return answer-1 # 아무것도 입지 않는 경우 제외
- 리스트에서 한 배열의 크기에 대해 값이 2개이면 두 개의 인자로 받을 수 있다.
- 해시에 넣고, 최소 한가지 answer = 1 초기화 (마지막에 모두 입지 않는 경우 제외)
다른 사람 풀이 2 - Counter
from collections import Counter
from functools import reduce
def solution(clothes):
# 의상 종류별 Counter
counter = Counter([type for name, type in clothes])
# 모든 종류의 count+1을 누적하여 곱
answer = reduce(lambda acc, cur:acc*(cur+1), counter.values(), 1) -1
return answer
다른 사람 풀이 3
def solution(clothes):
answer = 1
closet = {}
for _,k in clothes :
if k in closet :
closet[k] += 1
else :
closet[k] = 1
for k in closet :
answer *= closet[k]+1
return answer-1