728x90
정말 오랜만에 딕셔너리 위주의 문제를 만났다.
오랜만에 만나니 값을 선언하는 것만 기억나고 updateValue라던지 sort하는 방식이라던지...
하나도 생각나는 것이 없었다 ㅠㅠ
그래서 Dictionary에 대해서 다시 공부하고 문제를 풀었다.
문제 자체는 어렵지 않았다. 경우의 수 문제와 비슷해서 '의상의 종류'별로 몇개의 의상이 있는지 확인해주면 된다.
이 문제를 풀면서 생각한 논리적 흐름
- dict 딕셔너리를 선언해주고 그 안에 clothes 원소들을 넣어준다.
- 현재 clothes의 key 값이 현재 dict 딕셔너리 안에 없는 키라면 새로 생성 및 1의 값을 대입해주고
- 현재 clothes의 key 값이 현재 dict 딕셔너리 안에 있는 key라면 그 키의 value에 1을 더해준다.
- 이렇게 key별로 값이 정리되면 키 값에 +1 해준뒤 모든 값을 곱해준다. (+1은 안입었을 경우다.)
- 그리고 마지막에 -1을 해주는데 이는 모든 의류를 아예 안입는 경우는 없다고 했기 때문에 그 경우의 수를 빼준 것이다.
* 코드
import Foundation
func solution(_ clothes:[[String]]) -> Int {
var dict: [String: Int] = [:]
for i in clothes {
if dict[i[1]] != nil {
dict[i[1]]! += 1
} else {
dict[i[1]] = 1
}
}
var ans = 1
for (_, value) in dict {
ans *= (value + 1)
}
return ans - 1
}
정리(Today I Learned)
- Dictionay, Array, Set 이 다양한 Collection 타입에 따라 메서드들이 전부 바뀐다. 이를 전부 기억하면 최고겠지만 최소한의 콜렉션 타입에 대한 특성과 차이를 잘 숙지하고 있으면 어떤 상황에서 어떤 메서드를 사용해야할지 그때마다 찾아서 사용 가능할 것 같다.
'TIL > 알고리즘 공부' 카테고리의 다른 글
프로그래머스 Lv. 2 Swift 알고리즘 - 기능개발 (0) | 2023.01.08 |
---|---|
프로그래머스 Lv. 2 Swift 알고리즘 - 튜플 (0) | 2023.01.06 |
프로그래머스 Lv. 2 Swift 알고리즘 - 괄호 회전하기 (0) | 2023.01.05 |
프로그래머스 Lv. 2 Swift 알고리즘 - 행렬의 곱셈 (0) | 2023.01.05 |
프로그래머스 Lv. 2 Swift 알고리즘 - [1차] 캐시 (0) | 2023.01.04 |