


[ ["yellowhat", "headgear"],
["bluesunglasses", "eyewear"],
["green_turban", "headgear"] ]
입출력 예시 중 첫번째 배열로 예시를 들어보면
headgear의 수는 A(2) eyewear의 수는 B(1) 라고 가정했을 때
headgear 와 eyewear 의 조합의 경우의 수는 A * B 이다.
이때 A만 착용하고 B를 착용하지 않을 수도 있고,
반대로 B는 착용하고 A를 착용하지 않을 수도 있다.
선택하지 않을 수도 있다는 경우의 수도 추가되기 때문에 주어진 종류의 개수에 1씩 더해준다
(A+1) * (B+1)
그렇게 되면 A와 B를 둘다 착용하지 않는 경우의 수도 1개 추가 된다
주어진 조건에서 스파이는 하루에 최소 한 개의 의상은 입습니다 라는 조건에 의하여
아무것도 입지 않는 경우의 수를 -1 로 빼주어야 한다.
최종 : (A+1) * (B+1) - 1
function solution(clothes) {
let result = 1;
let obj = {};
clothes.forEach((el) => {
obj[el[1]] = (obj[el[1]] || 1) +1;
//[의상의종류] = 개수 더해주기
})
for(let key in obj){
result *= obj[key]
}
return result-1
}
obj에 처음 값이 추가 될 경우에 주어진 값이 없어 undifined가 들어가게 될 경우에 or 문을 사용하면 1로 선택이 된다
초기값이면 첫번째 경우의 수이기때문에 + 1 (안입는경우) 를 더해준다
만약 이미 값이 할당되어있다면 그 값에 경우의 수를 +1 더 추가해준다

그렇게 구한 의상의 종류의 개수를 for ... in 문을 통하여

구한 경우의 수를 초기에 만들어놓았던 result (1) 변수에 곱해준다
최종적으로 구해진 값에서 -1(아무것도 선택하지 않은경우) 를 빼고 리턴한다.
위 문제는 hash로 분류되어 있는 문제였는데,
hash table은 key-value 로 주어져있는 자료구조라고 생각한다.
그래서 주어진 [의상의 종류] : 경우의 수 를 object로 생성해서
문제를 푸는 방식이라 생각된다.
hash table은 모든 값을 하나하나 탐색하는것이 아니고
찾고자 하는 값만 정해져 있다면 그 값에 바로 접근 할 수 있어서 문제를 푸는데 시간이 더 적게 소요된다는 장점이 있다.
문제를 푸면서 항상 드는생각이지만 문제가 어떻게 주어졌는지 이해하면
어떤방식을 적용해야 쉽게 풀이할 수 있는지 아는것 같다
아직은 그 스킬이 부족한 것 같아 꾸준히 문제를 풀어가며 이해하는 방법 밖엔 없는거 같다..!
(2) 노마드코더 hash table 영상
https://www.youtube.com/watch?v=HraOg7W3VAM&t=406s