728x90

경우의 수와 관련된

수학문제

 

function solution(clothes) {
  let answer = 1;
  let obj = {};
  
  for(var i=0; i < clothes.length; i++) { 
    if(obj[clothes[i][1]] >= 1) { 
      obj[clothes[i][1]] += 1;
    } else { 
      obj[clothes[i][1]] = 1;
    } 
  }
    
  for (let key in obj) { 
    answer *= (obj[key]+1);
  }

  return answer - 1;
}

1. 객체에 해당 옷의 종류가 없으면 1

2. 객체에 해당 옷의 종류가 있으면 기존값 + 1

3. 경우의 수 계산을 위해 종류별로 곱해나가는데 (곱의 법칙), 해당 종류의 옷을 안입는 경우의 수도 존재하니 +1하여 곱한다.

4. 3번에 옥의티로 저렇게하면 모든 옷을 안입은 경우의 수가 발생하게 되는데 문제에서 아무것도 안입는 경우는 없다고 했으므로 마지막에 -1을 해준다.

 

 

* 한걸음 더 나아가 생각해보기

만약에, 문제에 모든 종류의 옷을 반드시 한가지씩 입어야한다는 조건이 붙는다면?

function solution(clothes) {
  let answer = 1;
  let obj = {};
  
  for(var i=0; i < clothes.length; i++) { 
    if(obj[clothes[i][1]] >= 1) { 
      obj[clothes[i][1]] += 1;
    } else { 
      obj[clothes[i][1]] = 1;
    } 
  }
    
  for (let key in obj) { 
    answer *= obj[key];
  }

  return answer;
}

1. 해당 종류의 옷을 안입는 경우를 제외

2. 위의 코드에서 모든 종류의 옷을 안입는 경우는 발생하지 않으므로 마지막에 -1도 제외

728x90
반응형