문제에서 요구하는건 각 카테고리별 옷을 겹치지않게 입을 수 있는 경우의 수를 구하는거라고 생각한다. 입출력 예에서 보듯 이중 배열로 각각 의상의 이름과 카테고리를 받아온다.
우선 문제의 키워드에서 힌트를 얻을 수 있었다. 해시를 활용해 문제에 접근해서 풀면 된다.
Hash(해시) : 데이터를 고유하게 식별하기 위해 고정된 길이의 값(해시값)을 생성하는 과정으로 Swift에서는 주로 컬렉션 타입(Set, Dictionary)에서 객체를 비교하거나, 데이터를 빠르게 검색하고 저장하기 위해 사용한다.
그렇다. 우리는 해시테이블 구조로 된 딕셔너리를 이용하면 된다.
그럼 데이터를 그룹화하기 위해 딕셔너리를 활용해 데이터를 그룹화를 하였다.
var categoryGroups: [String: [String]] = [:]
for cloth in clothes {
let name = cloth[0]
let category = cloth[1]
categoryGroups[category, default: []].append(name)
}
default
키워드는 만약에 값이 없는 키값이라면 빈배열을 기본값으로 제공한다는걸 의미로 안전하게 작업을 할 수 있게한다.key : 의류 카테고리
value : 각 카테고리에 소속된 의상들(배열로 구성)
이렇게 딕셔너리의 key값은 자동적으로 해시값을 계산해서 저장하고 있는다.
그렇기에 데이터 검색 속도가 빠르게 할 수 있고 동일한 해시값이 생겨도 내부적으로 처리하게 된다.
for i in categoryGroups.keys {
var value = 0
value = categoryGroups[i]!.count + 1
result *= value
}
다음은 입을 수 있는 의상의 수를 연산하는 부분이다. 우선 앞서 데이터를 저장한 카테고리그룹의 key의 값들을 순회돌면서 각 key값에 해당하는 배열의 갯수를 구하는 코드이다.