본문 바로가기
Algorithm/Programmers

[고득점 Kit(해시)] 위장 (Swift, Python)

by 원만사 2022. 1. 24.
반응형

 

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

풀이

 옷의 종류를 key로 하고 해당 종류에 몇 가지 의상이 있는지를 담아주는 사전을 하나 만든다. 그 후 종류별로 갖고 있는 의상의 개수에 +1을 해주어 서로 곱해주어 조합할 수 있는 경우의 수를 구해주면 된다. +1은 해당 종류의 의상을 입지 않았을 때를 의미한다. 

 이렇게 구한 값에 -1을 해주어 리턴하면 되는데 이는 모든 종류의 의상을 입지 않았을 때의 경우의 수를 제거해주는 것이다. 

 

코드

[Swift]

import Foundation

func solution(_ clothes:[[String]]) -> Int {
    var clothesDict: [String: Int] = [:] // 의상의 종류를 key로 하는 dictionary
    var answer: Int = 1
    
    // 입력으로 받은 의상들을 dictionary에 담아준다.
    for c in clothes {
        let kinds: String = c[1]
        
        if let value = clothesDict[kinds] {
            clothesDict[kinds] = value + 1
        } else {
            clothesDict[kinds] = 1
        }
    }
    
    // dictionary에 담겨 있는 의상들에 +1을 하고 곱하여 경우의 수를 구해준다.
    for value in clothesDict.values {
        answer *= (value + 1)
    }
    
    // 모든 의상을 입지 않았을 때를 제거해주고 리턴해준다.
    return answer - 1
}

 

[Python]

from collections import defaultdict


def solution(clothes):
    answer = 1

    # 의상의 종류를 key로 하는 dictionary
    clothesDict = defaultdict(int)

    # 입력으로 받은 의상들을 dictionary에 담아준다.
    for (_, kinds) in clothes:
        clothesDict[kinds] += 1

    # dictionary에 담겨 있는 의상들에 +1을 하고 곱하여 경우의 수를 구해준다.
    for i in clothesDict.values():
        answer *= (i + 1)

    # 모든 의상을 입지 않았을 때를 제거해주고 리턴해준다.
    return answer - 1
반응형

댓글