IT 개발자가 되기위한 여정

컴퓨터 공부를 시작함에 앞서 계획 및 개발에 대한 내용을 풀어나갈 생각입니다.

IT 학습/Algorithums

프로그래머스 - 위장 [해시_lv2]

제로시엘 2022. 4. 10. 05:35

사용한 메소드

reduce 메소드
reduce의 사용법으로 받아온 clothes를 카운팅 하였다.

 

Object.values() 메소드

내장 값을 values만 모아 배열로 만들어준다

https://ko.javascript.info/keys-values-entries

 

Object.keys, values, entries

 

ko.javascript.info

3가지의 접근방법에 대해

 

최종적으로 제출한 코드

 

function solution(clothes) {
let answer = [];
for (let i = 0; i < clothes.length; i++) {
  answer.push(clothes[i][1]);
}

let countedanswer = answer.reduce(function (allanswer, answer) {
   if (answer in allanswer) {
     allanswer[answer]++
    } else {
     allanswer[answer] = 1
    }
  return allanswer;
}, {})

let answer2 = Object.values(countedanswer)
let answer3 = 1;

for (let i = 0; i < answer2.length; i++) {
  answer3 = answer3 * (answer2[i] + 1);
}

return answer3 - 1;
}

 

고려해야 할 점

1. 값을 구하는 방법에 대해서

입력되는 값 구현하는 방법 결과
모자 * 3 (3 + 1) - 1 3
모자 * 3 , 옷 * 2 (3+1) * (2 + 1) -1 7
모자 * 3 , 옷 * 2 , 신발 * 4 (3+1) * (2 + 1) * (4 + 1) - 1 39

2. return = 결과값이 리턴되게 한다.

3. 옷의 종류가 같은 경우는 없다.

 

리펙토링

function solution(clothes) {
  let answer = 1;
  const obj = {};

  for (let arr of clothes) {
    if (!obj[arr[1]]) {
      obj[arr[1]] = 1;
    } else {
      obj[arr[1]]++;
    }
  }

  /* 값이 없으면 옷 = 1을 집어넣고 값이 있다면 옷을 ++ 한다
  obj = {
  headgear : 2
  eyewear : 1
  }
  로 표현된다
  */

  for (let key in obj) {
    answer *= obj[key] + 1;
  } // answer에 2+1 , 1+1을 각각 곱한다.

  return answer - 1;
}

더 줄일수 있지만 눈으로 보면서 이해하기 좋은 수준까지만 리펙토링 했다.

reduce를 사용하지 않고 for...of 함수를 사용해 Object를 정렬 생성하여

그중 key 값만 가져와서 (1*값*값) -1로 구현하였다.