사용한 메소드
reduce 메소드
reduce의 사용법으로 받아온 clothes를 카운팅 하였다.
Object.values() 메소드
내장 값을 values만 모아 배열로 만들어준다
https://ko.javascript.info/keys-values-entries
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로 구현하였다.
'IT 학습 > Algorithums' 카테고리의 다른 글
[엘리스 SW 3기] 코테전 입,출력 방식 정리 (0) | 2022.08.21 |
---|---|
정규 표현식 활용하기 (데이터 가공) (0) | 2022.06.03 |
프로그래머스 - 숫자 문자열과 영단어 [split , join] (0) | 2022.04.19 |
프로그래머스 - 신규 아이디 추천 [정규 표현식 , replace] (0) | 2022.04.17 |
프로그래머스 - 기능개발 [스택/큐_lv2] (0) | 2022.04.10 |