해시 - 위장
https://programmers.co.kr/learn/courses/30/lessons/42578
function solution(clothes) {
let answer = 1;
const clothesObj = {};
// {옷 종류 : 옷 개수} 로 객체에 넣어준다.
for (let i = 0; i < clothes.length; i++) {
clothesObj[clothes[i][1]] = (clothesObj[clothes[i][1]] || 1) + 1; // 아무것도 안 입었을 경우를 포함하기 위해 (|| 1)로 초기값 1 지정
}
for (let key in clothesObj) {
answer *= clothesObj[key]; // 조합 공식
}
// 하루에 최소 한 개 의상을 입어야하기 때문에 1(아무것도 안 입은 경우)을 빼준다
return answer - 1;
}
참고한 블로그
단축 평가
단축평가란
논리연산자는 왼쪽부터 오른쪽으로 평가를 진행하는데, 중간에 평가 결과가 나오면 끝까지 볼 필요없이 왼쪽 피연산자의 값을 그대로 반환하는 것을 말한다.
피연산자의 타입을 변환하지 않고 그대로 반환
논리 합 연산자 (||) : 둘 중 하나만 true이면 true를 반환한다.
- 왼쪽 피연산자가 true일 경우 바로 true 반환
true || true
: true
true || false
: true
오른쪽은 거들떠 보지도 않고 왼쪽 피연산자 값을 그대로 반환- 왼쪽 피연산자가 false일 경우 오른쪽 피연산자가 반환값을 결정한다.
false || true
: true
false || false
: false
작성한 코드에서 살펴보면
for (let i = 0; i < clothes.length; i++) {
clothesObj[clothes[i][1]] = (clothesObj[clothes[i][1]] || 1) + 1;
}
console.log(solution([["yellowhat", "headgear"], ["bluesunglasses", "eyewear"],
["green_turban", "headgear"]]))
i = 0 이면 clothesObj = {'headgear' : 0} 이고
0 || 1 결과는false || true
= true 이므로 초기값이 1이 들어간다.
0이 아닌 1인 이유는 아무것도 안 입은 경우도 더해주기 위해서
논리연산자로 푸신 분의 코드를 보고 많이 배울 수 있었다.