https://programmers.co.kr/learn/courses/30/lessons/42578
//위장
function solution(clothes) {
var answer = 1;
var obj = {};
// 초기값에서 하나씩 늘려나가는 방법
for(var i=0;i<clothes.length;i++){
if (obj[clothes[i][1]] >= 1) {
obj[clothes[i][1]] = obj[clothes[i][1]] +1;
}else{
obj[clothes[i][1]] = 1;
}
}
var arr = Object.values(obj);
for(var i=0; i<arr.length; i++){
answer = answer * (arr[i] + 1) //+1 해당 종류를 안쓰는 경우도 포함
}
answer = answer - 1; //-1: 모든 걸 아예 사용하지 않는 경우는 포함하지 않음
return answer;
}
'경우의 수'를 구하는 알고리즘 자체를 바로 떠올리지 못함...(코드에서 주석 처리된 부분)
Object 다루는게 아직도 미숙하다...
해시 문제는 다른게 아니고 주어진 데이터를 내가 필요로 하는 구조로(obj, key-value) 다시 만들어내는 과정이 수반되는 것.
obj[clothes[i][1]]
key값을 이렇게 설정해야 했는데..
다른 사람들의 코드
//1
function solution(clothes) {
var answer = 1;
var obj={};
for(var i=0;i<clothes.length;i++){
obj[clothes[i][1]]=(obj[clothes[i][1]] || 1) + 1;
}
for(var key in obj){
answer *= obj[key];
}
return answer-1;
}
//2
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;
}
해시.
object
reduce - object일때