본문 바로가기

Algorithm/프로그래머스 연습 문제

프로그래머스 / 코딩 테스트 / 위장

문제 설명

 

 

문제 해결

 

스파이가 옷을 어떻게 조합해서 입을 수 있는지 경우의 수를 구하는 문제이다.

각 부위에서 입지 않은 옷 하나를 선택하여 조합할 수 있다.

 

일단 규칙을 찾아내기 위해서 다양한 상황을 가정하고 직접 연산을 진행했다.

그 결과 각 부위의 옷의 개수 + 1를 서로 곱한 후, -1해줘야하는 규칙이 있는 것을 알아냈다.

 

안경1, 안경2, 안경3

안경1
안경2
안경3

res = 3

-----------------------------

안경1,안경2
바지1,바지2

안경1
안경2
바지1
바지2

안경1, 바지1
안경1, 바지2
안경2, 바지1
안경2, 바지2

res  = 8

------------------------------

안경1, 안경2
상의1
바지1, 바지2

안경1
안경2
상의1
바지1
바지2

안경1, 상의1
안경1, 바지1
안경1, 바지2

안경2, 상의1
안경2, 바지1
안경2, 바지2

상의1, 바지1
상의1, 바지2

안경1, 상의1, 바지1
안경1, 상의1, 바지2
안경2, 상의1, 바지1
안경2, 상의1, 바지2

res = 17 

 

collections 모듈을 이용해봤다.

경우의 수를 구하는 문제(특히 옷의 이름은 겹치지 않는다는 사항이 있다.)라 각 부위의 옷의 개수를 구해야했다.

Counter 클래스와 comprehension 문법을 사용하여 각 부위의 옷의 개수를 구했다.

그다음 각 부위의 옷의 개수 +1한 개수를 res에 계속 곱해준 후, -1을 해줬다.

 

import collections

def solve(clothes):
    counts = collections.Counter([kind for name, kind in clothes]).values()    
    
    res = 1
    for count in counts:
        res *= (count+1)
    
    return res-1

def solution(clothes):
    answer = solve(clothes)
    return answer

 

(스파이의 취향이 좀 독특한 것 같다...?)