알고리즘 풀이/프로그래머스

[Level 2] 위장

mhko411 2021. 3. 30. 21:58
728x90

programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr


접근

딕셔너리를 활용해서 풀 수 있겠지만 단순히 경우의 수를 구해서 풀 수 있을 것 같았다.

하지만 경우의 수를 구할 줄 몰랐고 한번 찾아봤다.

 

먼저 입어야하는 옷을 카테고리 별로 구분을 했을 때, 카테고리 별 옷의 개수를 각각 곱해준다면 모든 옷을 선택해서 입을 수 있는 경우의 수가 된다.

하지만 문제에서는 하나 이상을 무조건 입어야한다고 했고 이 말은 카테고리 별로 다입지 않고 하나만 입어도 된다는 뜻이다.

이것의 경우의 수를 구한다면 카테고리 별의 옷의 개수에 +1을 해주고 모두 곱해준다. 

+1을 해주는 것은 옷을 입지 않았을 때의 경우를 추가한 것이다.

마지막으로 위의 식으로 모두 계산이 되었다면 옷을 하나도 입지 않은 경우도 포함이 되어있기 때문에 -1을 해준다.

 

구현

- 먼저 딕셔너리를 선언한다.

- 그리고 clothes를 탐색하고 각각의 리스트에서 1번 인덱스를 key값으로 딕셔너리에 추가한다.

- 아직 해당 key가 존재하지 않는다면 1을 넣고 존재한다면 value를 +1한다.

- 이제 각각의 key값으로 접근하여 value에 +1을 해주어 answer에 곱해준다.

- 마지막으로 -1을 해주고 최종 반환을 한다.

def solution(clothes):
    answer = 0
    clothes_dict = {}
    for clothe in clothes:
        key = clothe[1]
        if key in clothes_dict:
            clothes_dict[key] += 1
        else:
            clothes_dict[key] = 1
    answer = 1
    for key in clothes_dict:
        answer *= (clothes_dict[key] + 1)
    answer -= 1
    return answer

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 3] 야근 지수  (0) 2021.04.15
[Level 3] 순위  (0) 2021.03.31
[Level 3] 입국심사  (0) 2021.03.29
[Level 2] 이진 변환 반복하기  (0) 2021.03.27
[Level 2] 문자열 압축  (0) 2021.03.25