ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] 위장
    [+] 알고리즘 [+] 2020. 4. 3. 16:24

     

     

    [문제 설명]

     

     

    스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.

    예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.

    종류이름

    얼굴 동그란 안경, 검정 선글라스
    상의 파란색 티셔츠
    하의 청바지
    겉옷 긴 코트

    스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.

     

    제한사항

    • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
    • 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
    • 같은 이름을 가진 의상은 존재하지 않습니다.
    • clothes의 모든 원소는 문자열로 이루어져 있습니다.
    • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
    • 스파이는 하루에 최소 한 개의 의상은 입습니다.

     

     

     

    [풀이 과정]

     

     

    전형적인 확률과 통계 문제다.

     

    대학교에 들어오면 고등학교때 배운 것은 모두 까먹는다, 쓸모없다고들 하는데...

     

    적어도 공학도에게는 적용되지 않는듯 하다. 

     

    알고리즘을 풀때 확통 문제가 상당히 자주 보이고, 선형 대수학에선 미분과 벡터를 기본으로 한다.

     

    여튼! 문제로 들어가보자.

     

    예를 들어 모자 3 종류와 상의 2 종류를 입는다고 할때, [[hat1, hat2, hat3], [top1, top2,]]

     

    각 배열의 길이에 +1을 더하여 [[hat1, hat2, hat3, None], [top1, top2, None]]

     

    각각의 길이를 곱하면

     

    ( hat1 , top1 )

    ( hat1 , top2 )

    ( hat1 , None )

    ( hat2 , top1 )

    ( hat2 , top2 )

    ( hat2 , None )

    ( hat3 , top1 )

    ( hat3 , top2 )

    ( hat3 , None )

    ( None , top1 )

    ( None , top2 )

    ( None , None )

     

    각각의 요소를 짝지어 매치할 수 있는 경우의 수를 구할 수 있다. (3+1) x (2+1)

     

    단 스파이는 하루에 최소 한 개의 의상은 입는 까닭에 (None, None)의 경우는 제외하여 총 11가지 임을 구할수 있다.

     

    from collections import Counter
    from functools import reduce
    
    def solution(clothes):
        
        val = Counter([category for kind, category in clothes])
        val = list(val.values())
        
        for i in range(0, len(val)):
            val[i] = val[i]+1
            
        return reduce(lambda x,y: x*y,val)-1

    '[+] 알고리즘 [+]' 카테고리의 다른 글

    [Programmers] 기능개발  (0) 2020.04.05
    [Programmers] 탑  (0) 2020.04.04
    [Programmers] 전화번호 목록  (0) 2020.04.03
    [Programmers] 멀쩡한 사각형  (0) 2020.03.20
    [Programmers] 종이접기  (0) 2020.03.18

    댓글

Designed by Tistory.