코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다. 예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야합니다.
코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.코니는 하루에 최소 한 개의 의상은 입습니다. 코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
제한사항
clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.코니가 가진 의상의 수는 1개 이상 30개 이하입니다.같은 이름을 가진 의상은 존재하지 않습니다.clothes의 모든 원소는 문자열로 이루어져 있습니다.모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
2. 문제 해석
조합을 구하는 문제.
2중 리스트를 dictonary,즉 hash 로 풀면 되는 문제.
3. 문제 풀이
풀이 (1) 100/100
def solution(clothes):
clothes_dic = {}
for cloth in clothes:
if cloth[1] not in list(clothes_dic.keys()):
clothes_dic[cloth[1]] = []
clothes_dic[cloth[1]].append(cloth[0])
else:
clothes_dic[cloth[1]].append(cloth[0])
answer = 1
for i in clothes_dic.values():
answer = answer*(len(i)+1)
return answer-1
정확성 테스트
테스트 1 〉
통과 (0.03ms, 10.2MB)
테스트 2 〉
통과 (0.02ms, 10.2MB)
테스트 3 〉
통과 (0.02ms, 9.99MB)
테스트 4 〉
통과 (0.02ms, 10.2MB)
테스트 5 〉
통과 (0.01ms, 10.3MB)
테스트 6 〉
통과 (0.01ms, 10.1MB)
테스트 7 〉
통과 (0.03ms, 10.1MB)
테스트 8 〉
통과 (0.02ms, 10MB)
테스트 9 〉
통과 (0.01ms, 10.1MB)
테스트 10 〉
통과 (0.01ms, 10.2MB)
테스트 11 〉
통과 (0.01ms, 10.2MB)
테스트 12 〉
통과 (0.02ms, 10.1MB)
테스트 13 〉
통과 (0.02ms, 10.1MB)
테스트 14 〉
통과 (0.01ms, 9.96MB)
테스트 15 〉
통과 (0.01ms, 10.1MB)
테스트 16 〉
통과 (0.00ms, 10.3MB)
테스트 17 〉
통과 (0.02ms, 9.96MB)
테스트 18 〉
통과 (0.02ms, 10MB)
테스트 19 〉
통과 (0.02ms, 10.1MB)
테스트 20 〉
통과 (0.01ms, 10.1MB)
테스트 21 〉
통과 (0.01ms, 10.1MB)
테스트 22 〉
통과 (0.01ms, 10MB)
테스트 23 〉
통과 (0.01ms, 9.91MB)
테스트 24 〉
통과 (0.01ms, 10.1MB)
테스트 25 〉
통과 (0.02ms, 10.3MB)
테스트 26 〉
통과 (0.03ms, 9.94MB)
테스트 27 〉
통과 (0.01ms, 9.96MB)
테스트 28 〉
통과 (0.03ms, 9.96MB)
풀이 (2) 100/100
def solution(clothes):
clothes_dic = {}
for cloth in clothes:
if cloth[1] not in clothes_dic:
# if cloth[1] not in list(clothes_dic.keys()):
clothes_dic[cloth[1]] = [cloth[0]]
else:
clothes_dic[cloth[1]].append(cloth[0])
answer = 1
for i in clothes_dic.values():
answer = answer*(len(i)+1)
return answer-1
정확성 테스트
테스트 1 〉
통과 (0.01ms, 10.1MB)
테스트 2 〉
통과 (0.01ms, 10.1MB)
테스트 3 〉
통과 (0.01ms, 10.1MB)
테스트 4 〉
통과 (0.01ms, 10.3MB)
테스트 5 〉
통과 (0.01ms, 10.1MB)
테스트 6 〉
통과 (0.01ms, 9.93MB)
테스트 7 〉
통과 (0.01ms, 10.2MB)
테스트 8 〉
통과 (0.01ms, 10.3MB)
테스트 9 〉
통과 (0.01ms, 10MB)
테스트 10 〉
통과 (0.00ms, 10.1MB)
테스트 11 〉
통과 (0.01ms, 10.1MB)
테스트 12 〉
통과 (0.01ms, 10.1MB)
테스트 13 〉
통과 (0.01ms, 10.3MB)
테스트 14 〉
통과 (0.01ms, 10.1MB)
테스트 15 〉
통과 (0.01ms, 10.1MB)
테스트 16 〉
통과 (0.00ms, 9.92MB)
테스트 17 〉
통과 (0.01ms, 10.2MB)
테스트 18 〉
통과 (0.01ms, 10.1MB)
테스트 19 〉
통과 (0.01ms, 10MB)
테스트 20 〉
통과 (0.01ms, 10.2MB)
테스트 21 〉
통과 (0.00ms, 10.2MB)
테스트 22 〉
통과 (0.00ms, 10.1MB)
테스트 23 〉
통과 (0.01ms, 10.2MB)
테스트 24 〉
통과 (0.01ms, 10.1MB)
테스트 25 〉
통과 (0.01ms, 10.1MB)
테스트 26 〉
통과 (0.01ms, 10.3MB)
테스트 27 〉
통과 (0.01ms, 10MB)
테스트 28 〉
통과 (0.01ms, 10.1MB)
4. 주요 코드 및 정리
실험
dict에서 in 을 이용하면 list 자료형에서 for문을 도는 것 보다 아주 쉽고 빠르게 연산이 가능하다.
key 값을 기준으로 있는지 없는지를 볼 때 이를 in dic로 쓰는 방식과 in list(dic.keys()))로 하는 차이가 궁금했다.