프로그래머스 위장 풀이
문제 풀러 가기
https://programmers.co.kr/learn/courses/30/lessons/42578?language=python3
문제 분석
1. 경우의 수를 이용한 풀이
코드
def solution(clothes):
dic={}
cnt=1
for i in clothes:
key = i[1]
value = i[0]
if key not in dic:
dic[key]=[value]
else:
dic[key].append(value)
for i in dic.keys():
cnt=cnt*(len(dic[i])+1)
return cnt-1
코드 풀이
def solution(clothes):
dic={}
cnt=1
for i in clothes:
key = i[1]
value = i[0]
if key not in dic:
dic[key]=[value]
else: #같은 종류의 의상이면, 그 key의 value리스트에 추가하기
dic[key].append(value)
for i in dic.keys():
cnt=cnt*(len(dic[i])+1)
# 모든 경우의수 + 해당 종류의 의상을 안입었을때의 경우의수
# 자세한 풀이는 아래 확인해주세요
return cnt-1
# (모든 경우의수 + 해당 종류의 의상을 안입었을때의 경우의수)- (모두 착용하지 않았을때 경우의 수)
경우의 수 계산법: (2가지 계산법)
<첫 번째 계산법>
예를 들어 이런 리스트가 있다면, [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]
딕셔너리로 이렇게 정리해준다.
{'headgear': ['yellow_hat', 'green_turban'], 'eyewear': ['blue_sunglasses']}
여기서 총경우의 수는, ((yellow_hat을 썼을 때 + green_turban을 썼을 때) +headgear 안 썼을 때) * ((blue_sunglasses 썼을 때)+ eyewear 안 썼을 때) = 3*2 = 6
이건 총경우의 수이고, 여기서 모두 착용하지 않았을 때의 경우의 수 하나를 빼면 6-1 = 5가 됩니다.
<두 번째 계산법>
혹은, 애초에 모두 착용하지 않은 경우의 수를 빼서 계산하는 법도 있습니다.
yellow_hat만 썼을 때 경우의 수 1 + green_turban만 썼을때 경우의 수 1 + blue_sunglasses만 썼을때 경우의 수 1 =3
headgear 1개, eyewear1개씩 썼을 때의 경우의 수는 2*1 = 2
=> 여기서 2와 1은 headegear와 eyewear에 있는 value의 개수.
3+2 = 5 가 됩니다.
하지만 두 번째 방법으로 계산한다면, 코드가 조금 더 복잡해지기 때문에 첫 번째 계산방식을 이용하는 것이 좋습니다.
<잡담&배운 점>
1. 딕셔너리의 value에 리스트를 사용할 수 있다.
오늘은 사실 간단한 문제였지만, 경우의 수를 생각해 내지 못했다면 어려웠을 문제입니다.
저는 처음에 아래 방식을 이용하여 경우의 수를 계산해서 조금 더 비효율적인 코드를 짰네요 ㅠ_ㅠ
'코딩테스트 > 코딩테스트 문제' 카테고리의 다른 글
코딩테스트 준비 - 프로그래머스Lv2: 구명보트 풀이 (파이썬) (0) | 2021.07.07 |
---|---|
코딩테스트 준비 - 프로그래머스Lv2: 영어 끝말잇기 풀이 (파이썬) (4) | 2021.07.06 |
코딩테스트 준비 - 프로그래머스: 카펫 풀이 (파이썬) (0) | 2021.07.02 |
코딩테스트 준비 - 프로그래머스: 다리를 지나는 트럭 풀이/상세 설명/스택과 큐 (파이썬) (0) | 2021.07.02 |
코딩테스트 준비 - 프로그래머스: 괄호 회전하기 풀이 (파이썬) (0) | 2021.07.02 |
댓글