object에 대한 api에 대해 잘 정립이 되어있지 않아 처음 로직을 짤 때 애먹었다. 특히 한 key값에 value를 2개 이상 넣어주려다 보니 배열 형태로 들어가는 상황이 발생했다.
그리고 마지막 값을 도출할 때도 계산을 잘못하여 시간이 걸렸다.
{key : [value]}
를 추가한다.function solution(clothes) {
let answer = 1;
let clothesObj = {}; // key 값에 따라 배열형태의 value가 들어가는 object
let cnt = []; // 각 key값의 배열길이
for (let i = 0; i < clothes.length; i++) {
let clothesObjKeys = Object.keys(clothesObj);
let findKey = clothesObjKeys.find((key) => key == clothes[i][1]);
//key값이 존재하면 배열에 value를 집어넣고 없으면 {key: [value]}를 clothesObj에 집어넣는다.
if (findKey === undefined) {
clothesObj[`${clothes[i][1]}`] = [`${clothes[i][0]}`];
} else {
clothesObj[`${clothes[i][1]}`].push(clothes[i][0]);
}
}
for (let key in clothesObj) {
cnt.push(clothesObj[key].length);
}
if (cnt.length === 1) {
answer = cnt[0];
return answer;
}
for (let j = 0; j < cnt.length; j++) { // 계산
answer *= cnt[j] + 1;
}
return answer - 1;
}
{key: 1}
을 집어넣는다. 그러고나서 바뀐 object를 obj에 집어넣어 clothes 배열 끝까지 반복한다.function solution(clothes) {
return (
Object.values(
clothes.reduce((obj, t) => {
obj[t[1]] = obj[t[1]] ? obj[t[1]] + 1 : 1;
return obj;
}, {})
).reduce((a, b) => a * (b + 1), 1) - 1
);
}
function solution(clothes) {
let answer = 1;
const obj = {};
for(let arr of clothes) {
obj[arr[1]] = (obj[arr[1]] || 0) + 1;
}
for(let key in obj) {
answer *= (obj[key]+1);
}
return answer - 1;
}
obj[arr[1]] || 0
을 사용하여 obj[arr[1]]가 undefined일 경우 0으로 초기화해준다.