[PG] 해시 > 위장
Closed this issue · 2 comments
Taehyeon-Kim commented
- 위장(Lv2)
Taehyeon-Kim commented
위장(Lv2)
느낀 점
- 아이디어 얻는 것은 어렵지 않았다.
- 경우의 수 개념(수학적 지식)을 알고 있었다면 그리 어렵지 않게 포인트를 잡아낼 수 있다.
- (카테고리1 + 1)...(카테고리N + 1) - 1
- 카테고리 (headgear, eyewear ...)
- 필요한 부분은 카테고리에 해당하는 의상의 갯수였다.
- 아이디어를 바탕으로 적절한 자료구조를 생각해보면 그냥 Dictionary가 떠올랐다.
- 의상의 카테고리가 key가 되고, 의상이 value가 되는 구조로 보고 로직을 작성하면 되었다.
- 카테고리만 얻어내기 위해서 map을 이용해보려고 했다.
- 코드가 한결 가벼워지긴 했지만, 여전히 반복문을 돌아야하기 때문에 작성하다만 느낌이었다.
- 다른 참고코드를 보니 compactMap을 이용할 수 있더라.
얻어갈 점, 개선할 점
- compactMap을 사용해보자.
Taehyeon-Kim commented
위장(Lv2) 코드 개선 및 학습
- 다른 사람 풀이 학습
- 진짜 고차함수를 적용해보는데 가장 기초적인 문제인 것 같아서 좋았다.
- 세상에는 고수가 많다..
- 원 데이터를 계속 수정하는 방식으로 생각했는데, 최대한 안 건드리고 데이터를 비교하는 식으로 접근하는 것도 좋을 것 같다.
import Foundation
func solution(_ clothes:[[String]]) -> Int {
let types = clothes.compactMap { $0.last }
let categories = Set(types)
let counts = categories.map({ category in
return clothes.filter({ $0.last == category }).count + 1
})
return counts.reduce(1, { $0 * $1 }) - 1
}
- last 프로퍼티 이용해서 마지막 요소 반환
- compactMap 이용한 optional 제거한 배열 반환
- Set 이용한 중복 제거
- map 안에서 다른 Collection 반환
- reduce 이용해서 요소 차례대로 곱셈