[프로그래머스/Python] 알고리즘고득점Kit-해시-의상

2024. 10. 13. 18:25·코딩테스트/프로그래머스
728x90
반응형

📌 문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/42578

프로그래머스

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

programmers.co.kr

 
 

📌 문제설명

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

  • 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.
  • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
  • 코니는 하루에 최소 한 개의 의상은 입습니다.

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

# 제한사항

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

 

📌 풀이과정

  1. 의상의 종류와 의상의 이름을 이용해 해시를 만들어줘야 할 것 같았다. => 딕셔너리 사용 
  2. 처음에는 key = '의상의 종류' values = ['의상의 이름1', 2.. ] 이렇게 만들었다. 그런데 굳이..? 싶어서 구글링을 해봤더니 📢 몇 개가 있는지가 더 중요하다는 점에서 숫자 1을 더해가면 된다는 걸 알았다. 
  3. 서로 다른 종류를 이용해 조합의 수를 구해야 했다. (사실 여기서 막힘.. 수학 머리 어디갔는데 ㅠ.ㅠ)
    • 종류A의 개수가 a개, 종류B의 개수가 b개라고 하면
    • 1) a x b => 종류 모두 사용할 때 조합
    • 2) a => 종류 A만 이용
    • 3) b => 종류 B만 이용  
  4. 이걸 코드로 표현하려면, 각 종류마다, 1) item개 중 1개 사용할 때와 2) 그 종류를 아예 안 사용할 때로 나눌 수 있다. 즉, 그 종류에 n개의 원소가 있다면 n + 1로 표현할 수 있는 것이다. 이걸 코드로 표현하면 아래와 같다. 
for i in hash_map.values():
        answer *= (i+1)

 
 

📌 풀이코드 

# 1:35 start 1:57 stop 5:50 start 
def solution(clothes):
    answer = 1
    # 의상의 종류를 기준으로 해시를 만들어야 할 듯 
    hash_map = {}
    for cloth in clothes:
        if cloth[1] in hash_map.keys():
            hash_map[cloth[1]] += 1
        else: 
            hash_map[cloth[1]] = 1
    
    for i in hash_map.values():
        answer *= (i+1)
    
    return answer - 1
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스/Python] 알고리즘고득점Kit-완전탐색-최소직사각형  (1) 2024.10.14
[프로그래머스/Python] 알고리즘고득점Kit-해시-폰켓몬  (5) 2024.10.13
[프로그래머스/Python] 알고리즘고득점Kit-해시-전화번호 목록  (0) 2024.10.13
[프로그래머스/Python] 알고리즘고득점Kit-정렬-가장 큰 수  (0) 2024.10.12
[프로그래머스/Python] 알고리즘고득점Kit-스택/큐-같은숫자는 싫어  (1) 2024.10.12
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스/Python] 알고리즘고득점Kit-완전탐색-최소직사각형
  • [프로그래머스/Python] 알고리즘고득점Kit-해시-폰켓몬
  • [프로그래머스/Python] 알고리즘고득점Kit-해시-전화번호 목록
  • [프로그래머스/Python] 알고리즘고득점Kit-정렬-가장 큰 수
heeya16
heeya16
개발 공부 냠냠
  • heeya16
    개발자 희야
    heeya16
  • 전체
    오늘
    어제
    • 분류 전체보기 (106)
      • 코딩테스트 (66)
        • 프로그래머스 (38)
        • SWEA (2)
        • BAEKJOON (26)
      • 알고리즘 (7)
      • 자료구조 (19)
      • 프로젝트 (5)
      • 취업 주르륵 (3)
      • 데이터베이스 (0)
      • IT지식 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1003
    10448
    10773
    10월
    10진수
    11047
    11399
    11403
    11866
    1449
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
heeya16
[프로그래머스/Python] 알고리즘고득점Kit-해시-의상
상단으로

티스토리툴바