(프로그래머스 42578) 위장

ps  · 2 mins read

이해

  • 스파이는 매일 다른 옷을 조합하여 입어 자신을 위장한다.
  • 스파이가 가진 옷들이 아래와 같을 때
    • 머리: 노란 모자, 빨간 모자
    • 얼굴: 선글라스
  • 스파이가 입을 수 있는 서로 다른 옷의 조합은 다음 아래와 같이 5개의 조합이 가능하다.
    • 노란 모자
    • 빨간 모자
    • 선글라스
    • 노란 모자, 선글라스
    • 빨간 모자, 선글라스
  • 스파이가 가진 의상들이 담긴 2차원 배열이 주어질 때 서로 다른 옷의 조합의 수를 return하라.

계획

  • 딕셔너리를 선언하여 종류: [이름1, 이름2, …]와 같은 key: value 형태로 저장한다.
  • 의상의 종류가 총 n가지, n가지 종류에 대한 각 의상의 수가 x1, x2, …, xn이라고 할 때
  • 서로 다른 옷의 조합의 수 = (x1 + 1) * (x2 + 1) * ... * (xn + 1) - 1
  • -1을 해주어 아무 의상도 입지 않은 경우를 제외시켰다.

실행

def solution(clothes):
    cloth_dic = dict()
    for cloth, kind in clothes:
        if kind not in cloth_dic.keys():
            cloth_dic[kind] = [cloth]
        else:
            cloth_dic[kind].append(cloth)
    
    result = 1
    for values_arr in cloth_dic.values():
        result *= len(values_arr) + 1
    
    return result - 1

개선

  • 딕셔너리에 종류: 의상의 개수의 형태로 저장하여 파이썬의 내장 함수(append, len)를 사용하지 않고 구현이 가능하다.
  • 딕셔너리의 key 값에 대해 for문을 돌릴 때는 딕셔너리의 내장 함수인 keys() 함수를 사용할 필요가 없다.
def solution(clothes):
    cloth_dic = dict()
    for cloth, kind in clothes:
        if kind not in cloth_dic:
            cloth_dic[kind] = 1
        else:
            cloth_dic[kind] += 1
    
    result = 1
    for value in cloth_dic.values():
        result *= value + 1
    
    return result - 1

회고

  • 쉬웠다.