프로그래머스 #JavaScript - 위장

SSO·2020년 2월 3일
0

프로그래머스 Lv2

목록 보기
16/46

문제

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일때

profile
happy

0개의 댓글