📚 문제

해시 - 위장
https://programmers.co.kr/learn/courses/30/lessons/42578

💡 접근

  1. 객체를 선언해주고 {옷 종류 : 옷 개수}로 객체에 넣어준다.
  2. key 값을 돌면서 value 값을 전부 곱해주면 아무것도 안입은것 ~ 전부 다 입은 것의 모든 조합의 수를 구할 수 있다.
    문제에서 하루에 최소 하나의 옷은 입는다고 했으니 -1 해준다.

⌨️ 코드

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를 반환한다.

      1. 왼쪽 피연산자가 true일 경우 바로 true 반환
        true || true : true
        true || false : true
        오른쪽은 거들떠 보지도 않고 왼쪽 피연산자 값을 그대로 반환
      2. 왼쪽 피연산자가 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인 이유는 아무것도 안 입은 경우도 더해주기 위해서

📝 리뷰

논리연산자로 푸신 분의 코드를 보고 많이 배울 수 있었다.

profile
깃허브: https://github.com/khakaa

0개의 댓글

Powered by GraphCDN, the GraphQL CDN