1. 문제



https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
옷의 이름과 종류 담겨있는 2차원 배열이 주어진다.
각 종류별로 최대 1가지 의상만 착용할 수 있을 때, 서로 다른 옷의 조합의 수는 얼마일까?
아무것도 안입을 수는 없다.
2. 풀이
간단하게 갈 수 있었는데 또 이상한 방식으로 풀이하려다 피봤다.
이항계수 * 각 종류별 옷의 개수 를 이용했는데 중복을 제거할 방법을 찾지 못해 포기했다.
의상의 종류를 key로 하는 딕셔너리를 만드는 것이 첫번째 포인트이다.
만약에 의상의 종류가 dict의 key에 있다면 기존의 key에 value를 append로 추가해준다.
반대로 의상의 종류가 dict의 key에 존재하지 않는다면 새로운 list를 만들어 새로운 카테고리에 의상을 추가해준다.
A의 종류의 의상이 N개, B의 종류의 의상이 M개 일 때, 가능한 모든 경우의 수는 (N+1)(M+1)로 구할 수 있다.
N, M에 각각 +1을 해주는 이유는 A를 사용하지 않는 경우, B를 사용하지 않는 경우를 포함하기 위함이다.
식을 풀어보면 다음과 같다.
(N+1)(M+1) = NM + N + M + 1
- NM: N과 M을 모두 사용하는 경우
- N: N만 사용하는 경우
- M: M만 사용하는 경우
- 모두 사용하지 않는 경우
옷을 안입는 경우는 없으므로 return 할때 -1(안입는 경우)를 해준다
3. 코드
나의 풀이:
def solution(clothes):
answer = 1
costume = {}
for name, category in clothes:
if category in costume.keys():
costume[category].append(name)
else:
costume[category] = [name]
for value in costume.values():
answer *= (len(value) + 1)
return answer -1
친구의 풀이:
def solution(clothes):
comb = {}
for _, k in clothes:
comb[k] = comb.get(k, 0) + 1
answer = 1
for v in comb.values():
answer *= v + 1
return answer - 1
'코딩 테스트 연습 > 프로그래머스' 카테고리의 다른 글
[Python]Programmers 행렬의 곱셈(lv2) (0) | 2024.03.18 |
---|---|
[Python]Programmers H-Index(lv2) (0) | 2024.03.17 |
[Python]Programmers 할인 행사(lv2) (0) | 2024.03.16 |
[Python]Programmers 할인 행사(lv2) (0) | 2024.03.14 |
[Python]Programmers 연속 부분 수열 합의 개수(lv2) (0) | 2024.03.12 |