티스토리 뷰

문제출처 - https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장 | 프로그래머스

 

programmers.co.kr

내 풀이1

import collections

def solution(clothes):
    answer = 1
    kind = []
    
    for a, b in clothes:
        kind.append(b)
        
    kind = collections.Counter(kind)
    
    for i in kind.values():
    	answer *= (i + 1)
    
    return answer - 1

풀이

  1. 일단 clothes 리스트에서 옷의 종류만 따로 리스트에 저장
  2. kind를 딕셔너리 형태로 변환
  3. kind에서 value값만 빼서 경우의 수 계산

경우의 수 계산

(옷의 개수 + 1)을 전부 곱하고 마지막에 1빼기

옷의 개수에서 +1을 한 이유는 입지 않는 경우도 있기 때문

 

 

내 풀이2

def solution(clothes):
    answer = 1
    dic = dict()
    
    for name, kind in clothes:
        if kind not in dic:
            dic[kind] = 1
        else:
            dic[kind] += 1
    
    for val in dic.values():
        answer *= (val + 1)
    
    return answer - 1

처음부터 딕셔너리를 한개 만들고 딕셔너리에 [옷의 종류, 종류의 개수]를 넣어줬음

 

 

다른 사람 풀이

from collections import Counter
def solution(clothes):
    counter_each_category = Counter([cat for _, cat in clothes])
    all_possible = 1
    
    for key in counter_each_category:
        all_possible *= (counter_each_category[key] + 1)

    return all_possible - 1

분석

clothes에서 옷종류만 빼서 counter로 변경하는 코드를 좀 더 간결하게 구현했다.

counter_each_category[key]를 사용해 특정 key값에 해당하는 value값을 구했다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함