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
- SW Expert Academy
- 너비우선탐색
- 브루트포스
- 백준 알고리즘
- 백트래킹
- 스택
- Python
- 프로그래머스
- 구현
- 그래프 탐색
- oracle
- 브루트포스 알고리즘
- javascript
- 자바스크립트
- 깊이우선탐색
- 그리디 알고리즘
- 다이나믹 프로그래밍
- BFS
- 파이썬
- DP
- SWEA
- 너비 우선 탐색
- 완전탐색
- 문자열
- 오라클
- 데이터베이스
- 백준알고리즘
- 그래프 이론
- DFS
- 다익스트라
Archives
- Today
- Total
민규의 흔적
[Python 파이썬] 프로그래머스 - 의상 본문
2024년 6월 22일
문제 링크 : 프로그래머스 - 의상
문제 접근
각 카테고리의 옷은 0 ~ 1 가지 입을 수 있으며, 최소한 하나라도 입는 옷 코디 조합을 구하는 것이다.
단, 모든 옷을 0개 입는(아무것도 입지 않는) 경우는 코디 조합에 포함시키지 않아야 한다.
문제를 보자마자 딕셔너리로 카테고리별 옷들의 종류를 구분해주어야 겠다고 생각했다.
그러면 각 카테고리별로 옷이 몇 가지 씩 있는지 알 수 있는데, 단 해당 카테고리의 옷을 안입는다는 전제도 포함해야 하므로 공백문자("")또한 각 카테고리별로 추가해주었다.
우리는 여기서 가짓 수를 조합하는 공식을 떠올릴 수 있다.
A개의 상의와 B개의 하의와 C개의 신발을 입는 서로 다른 코디의 종류는 A * B * C 이다.
하지만 여기서는 안 입는 조건도 생각해야 하므로, (A + 1) * (B + 1) * (C + 1) 이다.
하지만! 아무것도 입지 않는 경우는 제외해야 하므로 위 결과값에서 1을 빼주어야 한다.
전체 코드
def solution(clothes):
answer = 1
dict = {}
categories = []
for c, category in clothes:
if category not in dict:
dict[category] = ["", c]
categories.append(category)
else:
dict[category].append(c)
for _, value in dict.items():
answer *= len(value)
# 아무것도 안 입는 조합은 빼야함
return answer - 1
if __name__ == "__main__":
clothes = [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
print(solution(clothes))
풀이 후기
풀고 나니 딕셔너리의 밸류로 옷 종류를 그대로 넣을 필요가 없다는 것을 깨달았다. 밸류에 그냥 해당 카테고리의 가짓수를 넣었다면 쪼오오금 더 효율적인 로직이었지 않을까 싶다.
'프로그래머스' 카테고리의 다른 글
[Python 파이썬] 프로그래머스 - 전력망을 둘로 나누기 (0) | 2024.07.05 |
---|---|
[JavaScript 자바스크립트] 프로그래머스 - 카펫 (0) | 2024.06.30 |
[Python 파이썬] 프로그래머스 - 소수 찾기(Lv 2) (0) | 2024.06.22 |
[Python 파이썬] 프로그래머스 - 섬 연결하기 (0) | 2024.06.18 |
[Python 파이썬] 프로그래머스 - 가장 먼 노드 (0) | 2024.06.18 |