[프로그래머스] Level 2 - 위장 (JavaScript)

구미·2021년 8월 30일
0

알고리즘

목록 보기
24/25

🔍 처음 제출한 풀이

function solution(clothes) {
  const map = new Map();
  let answer = 1;

  for (let [value, key] of clothes) {
    if (map.has(key)) {
      const cur = map.get(key);
      cur.push(value);
      map.set(key, cur);
    }
    else map.set(key, [value]);
  }

  for (let [key, value] of map) {
    answer *= (value.length + 1);
  }

  return answer - 1;
}

이 문제를 풀기 전에 Map 객체로 해시 문제를 좀 풀어서 이것도 해시로 풀어봤다. 위처럼 풀면 map에는 아래와 같이 문자열 key와 배열 value가 들어가게 된다.

Map {
  'headgear' => [ 'yellowhat', 'green_turban' ],
  'eyewear' => [ 'bluesunglasses' ]
}

그런데 경우의 수를 구할 때 어차피 keyvalue의 개수를 이용하기 때문에 key에 배열을 저장하는 대신 의상 종류 key에 해당하는 의상 개수가 몇 개인지를 value로 정하는 것이 효율적이라는 생각이 들었다 🤔

🔍 수정한 풀이

function solution(clothes) {
  const map = new Map();
  let answer = 1;
  
  for (let [value, key] of clothes) {
    if (map.has(key)) map.set(key, map.get(key) + 1);
    else map.set(key, 1);
  }

  for (let [key, value] of map) {
    answer *= (value + 1);
  }
  
  return answer - 1;
}

그래서 위처럼 수정! ✍️

🔍 object를 이용한 풀이

function solution(clothes) {
  const obj = {};
  let answer = 1;

  for (let [value, key] of clothes) {
    if (!obj[key]) obj[key] = 1;
    else obj[key] += 1;
  }

  const values = Object.values(obj);
  for (let value of values) answer *= (value + 1);
  
  return answer - 1;
}

object로도 한번 풀어봤다.

✏️ reduceobject 만들기

const obj = clothes.reduce((a, c) => {
  a[c[1]] = a[c[1]] ? a[c[1]] + 1 : 1;
  return a;
}, {});

TODO: 내용 추가하기


🌱 문제 출처

https://programmers.co.kr/learn/courses/30/lessons/42578?language=javascript

🌱 참고

https://im-developer.tistory.com/128

profile
디지털 노마드를 꿈꾸며! 🦄 🌈

0개의 댓글