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로 구현하였다.