Programmers / 2단계 / 의상 / python

2024. 2. 9. 17:15·코딩테스트/programmers (python)

 

코딩테스트 연습 - 의상 | 프로그래머스 스쿨 (programmers.co.kr)

 

나의 풀이 

.

 

 

모범 답안

def solution(clothes):
    clothes_type = {}

    for c, t in clothes:
        if t not in clothes_type:
            clothes_type[t] = 2  #첨에 딕셔너리에 해당 종류의 의상이 없을 때 그 의상을 더 해주면서 
                                 #아무것도 안입었을때의 경우를 함께 생각해서 2를 더해줍니다.
        else:
            clothes_type[t] += 1

    cnt = 1
    for num in clothes_type.values():
        cnt *= num

    return cnt - 1

 

def solution(clothes):
    hash_map = {}
    for clothe, type in clothes:
        hash_map[type] = hash_map.get(type, 0) + 1
        
    answer = 1
    for type in hash_map:   
        answer *= (hash_map[type] + 1)
    
    return answer - 1

 

 

1) HashMap 만들기

  • HashMap이란 Key-Value의 Pair를 관리하는 Dictionary이다.
  • 이 문제에서 Key는 옷의 종류가 되고, Value는 해당 옷 종류의 가짓수(count)를 의미한다.

2) clothes 배열에 존재하는 모든 옷의 종류의 count table 만들기

  • 'Hashing을 한다'라고도 표현하는데, HashMap에 의상 종류를 전부 추가해보자. 
  • 위 코드의 동작 방식은 다음 예시로 설명하는 것이 가장 쉽게 이해가 가능할 것이다.

 

 

  • Hash Map을 보고 나면 별게 아니다. 이 문제에서는 Key 값으로 전화번호를 관리하는 전화번호부 같은 것이다.
  • HashMap.get(type, 0)
    • 이 함수는 'B'라는 Key에 해당하는 Value가 있으면 가져오고, 아닐 경우 0을 Default로 지정하여 사용하겠다는 의미의 함수이다.
    • Value는 곧 옷 종류의 가짓수가 되기 때문에, 이전에 값이 있었으면 기존 값에 + 1을 하면 되고
    • 없었으면 1을 입력하면 된다.

3) 각 옷 종류별 경우의 수를 answer에 곱해준다

  • 이제 모든 옷 종류의 count가 잘 입력되었다면, answer에 곱해주면 된다.
  • 하지만 모든 옷 종류에 대해서 안 입는 경우가 있기 때문에 ans *= it.next().intValue()라고 하지 않고
  • ans *= it.next().intValue() + 1을 곱해줘야 한다.
  • 즉, +1은 각 옷 종류를 입지 않는 경우를 고려하기 위해 추가되어야 하는 것이다.

4) 예외처리

  • 아무리 스파이가 모자 하나만 달랑 입어도 된다고 해도, 아무것도 입지 않는 것은 허용되지 않는 것이 문제의 전제이다.
  • 그렇기 때문에 마지막에 -1을 해줘서 모든 옷의 종류를 입지 않은 경우 1개를 제외시켜 주고,
  • 예제 #2에서도 동일하게 잘 동작하는 걸 확인하면 제출해보고 정답임을 확인할 수 있다.

 

 

참조

https://coding-grandpa.tistory.com/88 

 

[프로그래머스] 위장 (해시 Lv. 2) - 파이썬 Python

0. 동일 유형 문제 [프로그래머스] 완주하지 못한 선수 (해시 Lv. 1) [프로그래머스] 전화번호 목록 (해시 Lv. 2) [프로그래머스] 위장 (해시 Lv. 2) [프로그래머스] 베스트 앨범 (해시 Lv. 3) 1. 문제 설명

coding-grandpa.tistory.com

 

'코딩테스트 > programmers (python)' 카테고리의 다른 글

Programmers / 2단계 / 타겟 넘버 / python  (1) 2024.02.13
Programmers / 2단계 / 캐시 / python  (0) 2024.02.13
Programmers / 2단계 / 가장 큰 수 / python  (0) 2024.02.08
Programmers / 2단계 / 행렬의 곱셈 / python  (1) 2024.02.08
Programmers / 2단계 / H-Index / python  (0) 2024.02.08
'코딩테스트/programmers (python)' 카테고리의 다른 글
  • Programmers / 2단계 / 타겟 넘버 / python
  • Programmers / 2단계 / 캐시 / python
  • Programmers / 2단계 / 가장 큰 수 / python
  • Programmers / 2단계 / 행렬의 곱셈 / python
seulll
seulll
개인 공부 / 정리 블로그입니다
  • seulll
    seulll
    seulll
  • 전체
    오늘
    어제
    • 분류 전체보기 (320) N
      • 코딩테스트 (221) N
        • programmers (python) (155)
        • 백준 (python) (64) N
      • 자료구조 | 알고리즘 (14)
      • 개발 | 프로젝트 (18) N
        • Python (4)
        • Java | Spring (6)
        • Unity (3)
        • API (3)
      • CS (15)
        • Network (5)
        • SQL (2)
        • OS (4)
      • 데이터 분석 (14)
      • 기타 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 설정
  • 링크

    • GitHub
  • 인기 글

  • 태그

    대입 표현식
    프렌즈4블록
    Boxplot
    Python
    파이썬
    프로그래머스
    카카오맵 api
    웹크롤링
    kakao map api
    asterisk
    박스플롯
    백엔드
    백엔드 개발자
    solving environment
    데이터분석
    API
    백엔드 개발자 역량
    야근 지수
    코딩테스트
    train_test_split
    Greedy
    모델 성능 평가
    2 x n 타일링
    오차행렬
    바다코끼리
    그리디 알고리즘
    오블완
    confusion matrix
    티스토리챌린지
    카카오맵
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
seulll
Programmers / 2단계 / 의상 / python
상단으로

티스토리툴바