2023-03-19
프로그래머스 위장 파이썬 (해시)
참고: 코딩테스트 연습 - 위장 | 프로그래머스 스쿨 (programmers.co.kr)
무엇?
- 조합 원소 길이: 1개 ~ 의상의 종류 갯수
- 어떤 종류의 의상을 입을 것인지 경우의 수를 구하여 카운트
- 문제 요약:
- 매일 다른 옷을 입도록 조합
- 조합의 수를 return
- 제한사항:
- 의상의 이름, 의상의 종류로 구성
- 의상의 수: 1개 이상 30개 이하
- 중복 없음
- 문자열의 길이: 1이상 20이하
- 문자열의 구성: 알파벳 소문자, “_”
- 최소 하루 한개 이상은 입어야 함
왜?
해시 테이블 연습
어떻게?
내 코드
- 각각의 옷 종류의 개수를 세어 저장하는 딕셔너리를 생성
- 조합의 총 수를 계산
- 각 의상 카테고리에 포함된 의상 갯수 + 1을 모두 곱한 것이 경우의 수에 해당함 (※ +1은 해당 카테고리의 어떠한 의상도 입지 않는 경우를 포함하는 것)
- count에서 1 제외 (※ 어떠한 카테고리의 옷도 입지 않는 경우를 제외시킴)
def solution(clothes):
clothes_dict = {}
# 각 카테고리에 몇 가지 옷이 있는지 카운트한 딕셔너리
for item in clothes:
if item[-1] in clothes_dict.keys():
clothes_dict[item[-1]] += 1
else:
clothes_dict[item[-1]] = 1
count = 1
for value in clothes_dict.values(): # 옷가지 갯수에 대해서
count *= (value + 1) # + 1은 해당 카테고리의 어떠한 옷도 입지 않는 경우
return count - 1 # -1은 아무런 옷도 입지 않은 경우의 수를 제외하기 위함
try-error
- itertools의 combination 사용 + 옷의 개수를 세는 딕셔너리 또 만듦 + nested loop -> 시간복잡도 ↑ ⇒ 테스트 1 통과 실패
- dict에 모두 담기 (빠르게 검색하기 위해)
- 의상 조합 산출하기 (2개~의상 종류 갯수)
- 각각의 의상 조합에 대해 경우의 수 계산 → 시간 복잡도 상승
- 의상 종류를 dict에서 검색
- 몇 개 있는지 확인 후 저장
- 모두 곱한 후 count 업데이트
- 각각의 의상 조합에 대해 경우의 수 계산 → 시간 복잡도 상승
- 입지 않는 경우를 고려하기 위해 의상 갯수를 몇 개 입는지 경우의 수를 일일이 계산 할 필요 없음.
- 1개만 입는 경우, 2개 이상 입는 경우 등을 일일이 고려하려면 시간이 걸릴 수밖에 없다.
'크래프톤정글 > TIL & WIL' 카테고리의 다른 글
코딜리티 L6_NumberOfDiscIntersections 파이썬 (라인 스위핑) (0) | 2023.03.18 |
---|---|
코딜리티 L14_MinMaxDivision 파이썬 (이진탐색) (1) | 2023.03.18 |
코딜리티 L1 BinaryGap 파이썬 (0) | 2023.03.18 |
백준 2470번 두 용액 파이썬 (투 포인터) (0) | 2023.02.20 |
백준 1914번 하노이탑 파이썬 (재귀) (0) | 2023.01.31 |