프로그래머스 | 의상 [파이썬 python]

2023. 10. 2. 20:18·Algorithm/프로그래머스
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코드

def solution(clothes):
    # 각 종류별 가진 의상을 저장 (종류:[이름, 이름, ...])
    closet = {} 
    for name, kind in clothes:
        if kind in closet.keys():
            closet[kind] += [name]
        else:
            closet[kind] = [name]
    
    # A의 종류가 N개, B의 종류가 M개 일 때 가능한 모든 경우의 수 (N+1)(M+1)
    answer = 1
    for _, value in closet.items():
        answer *= (len(value) + 1)
        
    return answer -1

의상의 종류를 key로 하는 딕셔너리를 만드는 것이 이 문제의 핵심이다.

종류별로 의상을 나눠 저장한 딕셔너리 closet을 가지고 경우의 수를 계산해 주면 된다.

 

A의 종류가 N개, B의 종류가 M개 일 때 가능한 모든 경우의 수는 (N+1)(M+1)로 구할 수 있다. 

N, M에 각각 +1을 해주는 이유는 A를 사용하지 않는 경우, B를 사용하지 않는 경우를 포함하기 위함이다.

문제에서 최소 1개의 의상을 입어야 한다고 했으므로, 경우에 따라 어떤 종류는 착용하지 않을 수도 있다는 점을 생각해야 한다.

 

경우의 수를 구할 때 어떻게 저 식이 가능한지 처음에는 헷갈렸는데 식을 풀어보면 이해하기 좀 더 쉽다.

(N+1)(M+1) = NM + N + M + 1

  • NM: N과 M을 모두 사용하는 경우
  • N: N만 사용하는 경우
  • M: M만 사용하는 경우
  • 1: 모두 사용하지 않는 경우 

 

(N+1)(M+1)에는 A, B 모두를 사용하지 않는 경우가 포함되어 있는 것을 알 수 있다.

따라서, 결괏값 리턴시 -1을 통해 아무것도 입지 않는 경우를 제외하여 최소 1개 이상의 의상을 입는 경우의 수만 리턴할 수 있도록 한다.

 

 

이 문제는 해시 알고리즘으로 분류되는데, 해시 개념이 부족해 딕셔너리를 사용해 풀었는데 알고 보니 파이썬에서는 해시가 딕셔너리라는 것을 다른 풀이들을 찾아보며 알게 되었다.

시간 여유가 생기면 해시에 대해서 공부하고 정리해 보아야겠다.

 

 

반응형
저작자표시 (새창열림)
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 롤케이크 자르기 [파이썬 python]
  • 프로그래머스 | 더 맵게 [파이썬 python]
  • 프로그래머스 | 게임 맵 최단거리 [파이썬 python]
  • 프로그래머스 | 기능개발 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (43)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 의상 [파이썬 python]
상단으로

티스토리툴바