[프로그래머스] Level 2 - 위장 (JavaScript)
🔍 처음 제출한 풀이
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' ]
}
그런데 경우의 수를 구할 때 어차피 key
별 value
의 개수를 이용하기 때문에 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
로도 한번 풀어봤다.
✏️ reduce
로 object
만들기
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
Author And Source
이 문제에 관하여([프로그래머스] Level 2 - 위장 (JavaScript)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@9ummy/프로그래머스-Level-2-위장-JavaScript저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)