Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
반응형
Archives
Today
Total
관리 메뉴

슈프림 블로그

[프로그래머스] 해시 - 위장 (Swift 풀이) 본문

코딩테스트

[프로그래머스] 해시 - 위장 (Swift 풀이)

_슈프림 2020. 9. 1. 16:51
728x90

2020.08.30

어떻게 접근을 할까?

같은 이름의 옷은 없다고 했으므로 어떤 옷이 무슨 종류인지 보다, 옷의 종류별로 몇개의 옷이 있는지가 중요하다.

=> 반복문을 돌면서 [옷의 종류 : 종류별 개수] 형태의 딕셔너리에 저장하자.

 

한 종류의 옷은 0개 또는 1개만 착용 가능하고

한번에 옷의 종류별로 최대 1개씩만 착용 가능하므로 종류가 3종류라면 한번에 최대 3벌의 옷을 입을 수 있는 것이다.

 

상의에 착용할 수 있는 옷이 2벌, 하의에 착용할 수 있는 옷이 3벌인 경우를 가정해보자.

상의에 착용할 수 있는 경우의 수는 가지고 있는 2벌 또는 입지 않는 경우이므로 총 3가지다.

하의는 가지고 있는 3벌을 입거나 입지 않는 경우로 총 4가지다.

상의와 하의의 조합을 따져보면 총 3x4 = 12가지이다.

하지만 아예 아무것도 입지 않는 경우는 없다고 했으므로 모든 조합의 경우의 수에서 1가지만 빼주면 된다.

=> 즉 공식을 세워보자면 각 종류별로 (가지고 있는 옷의 개수 + 1)을 모두 곱한 뒤 1을 빼주면 된다.

 

import Foundation

func solution(_ clothes:[[String]]) -> Int {
    var typeCount: [String:Int] = [:]
    for cloth in clothes {
        if typeCount[cloth[1]] != nil {
            typeCount[cloth[1]]! += 1
        } else {
            typeCount[cloth[1]] = 1
        }

    }
    var count: Int = 1
    for (_, value) in typeCount {
        count *= (value + 1)
    }
    return count - 1
}

 

반응형
Comments