[프로그래머스] 위장 문제풀이 python

mauz·2022년 5월 30일
0
post-custom-banner

🐒 문제

https://programmers.co.kr/learn/courses/30/lessons/42578

✍ 나의 풀이

def solution(clothes):
    answer = 1
    dic = {}

    for i in clothes:
        if not i[1] in dic:
            dic[i[1]] = 1
        else:
            dic[i[1]] += 1
    for v in dic.values():
        answer *= (v+1)

    return answer - 1

해시 카테고리의 문제를 풀었다.


🧠 문제 이해

입력이

clothes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]

일때,

딕셔너리에 종류별로 옷이 몇 벌 있는지 저장하면,

dic = {"headgear" : 2, "eyewear" : 1}

headgear 에서 옷을 골라 입을 경우의 수 : yellowhat, green_turban, 착용안함
eyegear 에서 옷을 골라 입을 경우의 수 : bluesunglasses

각 경우의 수 의 곱 3*2 = 6 이 모든 경우의 수 이지만,
아무것도 착용하지 않는 경우를 제외해야 하므로 6 - 1 = 5


코드

def solution(clothes):
    answer = 1	# answers에 각 경우의 수를 곱하기 위해 1로 초기화
    dic = {}	# 해시 테이블 초기화

    for i in clothes:	# clothes 리스트를 돌면서
        if not i[1] in dic:	# 처음 보는 옷 종류면
            dic[i[1]] = 1	  # 딕셔너리에 새로 선언
        else:				# 있던 옷 종류면
            dic[i[1]] += 1	  # 개수 추가
    for v in dic.values():	# 딕셔너리에 value(종류별 옷 개수)를 돌면서
        answer *= (v+1) #각 경우의 수들을 곱해줌 

    return answer - 1	# 아무것도 입지않는 경우 1 제외
정확성  테스트
테스트 1 〉	통과 (0.01ms, 10MB)
테스트 2 〉	통과 (0.01ms, 10MB)
테스트 3 〉	통과 (0.01ms, 10.2MB)
테스트 4 〉	통과 (0.01ms, 10.1MB)
테스트 5 〉	통과 (0.01ms, 9.98MB)
테스트 6 〉	통과 (0.01ms, 10.1MB)
테스트 7 〉	통과 (0.02ms, 10.1MB)
테스트 8 〉	통과 (0.01ms, 10MB)
테스트 9 〉	통과 (0.00ms, 10.2MB)
테스트 10 〉	통과 (0.00ms, 10.1MB)
테스트 11 〉	통과 (0.00ms, 10.1MB)
테스트 12 〉	통과 (0.01ms, 10.3MB)
테스트 13 〉	통과 (0.01ms, 10.1MB)
테스트 14 〉	통과 (0.01ms, 10.1MB)
테스트 15 〉	통과 (0.01ms, 10.1MB)
테스트 16 〉	통과 (0.01ms, 10MB)
테스트 17 〉	통과 (0.01ms, 10MB)
테스트 18 〉	통과 (0.01ms, 10.2MB)
테스트 19 〉	통과 (0.01ms, 10.2MB)
테스트 20 〉	통과 (0.00ms, 10MB)
테스트 21 〉	통과 (0.01ms, 9.95MB)
테스트 22 〉	통과 (0.00ms, 10.1MB)
테스트 23 〉	통과 (0.01ms, 10.1MB)
테스트 24 〉	통과 (0.01ms, 10.1MB)
테스트 25 〉	통과 (0.01ms, 10.1MB)
테스트 26 〉	통과 (0.01ms, 10.1MB)
테스트 27 〉	통과 (0.01ms, 10.1MB)
테스트 28 〉	통과 (0.01ms, 10.2MB)
profile
쥐구멍에 볕드는 날
post-custom-banner

0개의 댓글