반응형
의상의 조합을 찾는 문제.
상의 : 셔츠, 티, 아우터
하의 : 바지, 치마, 칠부
와 같이 있다면, 총 조합의 수는 ('상의 수'+1) * ('하의 수' + 1) -1
현재 python의 문법을 잘 모르기에 차근차근 풀어보았다. 매우 쉽긴하다..
먼저, dict에 list로 담아서 풀어 보았다.
def solution(clothes):
size = len(clothes)
dict = {}
for i in range(size) :
clothe = clothes[i]
if clothe[1] in dict:
dict[clothe[1]].append(clothe[0])
else:
dict[clothe[1]] = [clothe[0]]
answer = 1
for key in dict:
print(dict[key])
answer*=(len(dict[key])+1)
return answer-1
dictionary에 담긴 내용을 print로 확인
['yellow_hat', 'green_turban']
['blue_sunglasses']
list로 저장하는 것보다는 의상의 갯수를 바로 더하는 것이 더 빠를터이다.
def solution(clothes):
size = len(clothes)
dict = {}
for i in range(size) :
clothe = clothes[i]
if clothe[1] in dict:
dict[clothe[1]]+=1
else:
dict[clothe[1]] = 1
answer = 1
for key in dict:
answer*=dict[key]+1
return answer-1
Counter : 데이터 개수 셀 때 유용한 클래스!
별도 패키지 설치 없이 파이썬만 설치되어 있으면 사용가능.
from collections import Counter
counter = Counter(["abc","abc","bcd","bcd","bc","d"]) // Counter({'abc': 2, 'bcd': 2, 'bc': 1, 'd': 1})
[name for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]
## ['yellow_hat', 'blue_sunglasses', 'green_turban']
[kind for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]
## ['headgear', 'eyewear', 'headgear']
=> 의상 별 개수를 세고 싶다.
Counter([kind for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]])
# Counter({'headgear': 2, 'eyewear': 1})
=> 마지막으로 (2+1)* (1+1)-1 계산이 필요하다.
기본적인 for문 사용
j=1
for i in Counter([kind for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]).values():
j*=(i+1)
j-=1
reduce 활용.
j = reduce(lambda x,y: x*(y+1), Counter([kind for name,kind in [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]]).values(),1)
최종코드
def solution(clothes):
from collections import Counter
from functools import reduce
counter=Counter([kin for name, kind in clothes])
answer = reduce(lambda x,y :x*(y+1), counter.values(), 1)-1
return answer
반응형
'코딩 테스트' 카테고리의 다른 글
[LeetCode] 2. Add Two Numbers - Medium (0) | 2023.02.15 |
---|---|
[LeetCode] 1. Two Sum - Easy (0) | 2023.02.15 |
[프로그래머스] 디스크 컨트롤러 (0) | 2023.02.10 |
[코딩테스트] 프로그래머스 : 주식가격 (0) | 2022.12.05 |
[코딩테스트] 프로그래머스 : 프린터(python) (1) | 2022.11.30 |
댓글