내 통과 코드
function solution(clothes) {
let answer = 0;
let closet = clothes.reduce((prev,now) => ({ ...prev, [now[1]]: (prev[now[1]] || 0) + 1 }),{});
let key = Object.keys(closet).length-1;
let res = 1;
while (key >= 0) {
res *= closet[Object.keys(closet)[key]]+1
key--;
}
return answer = res - 1, answer;
}
종류 - 모자:[빨강, 검정] , 상의:[긴팔, 민소매] , 하의:[미디스커트, 슬랙스, 숏팬츠] 라고 한다면
모자의 종류 2가지 상의의 종류 2가지 하의의 종류3가지 라고 한다면
모자에서 나올 수 있는 경우의 수 - 빨강 착용/ 검정 착용/ 미착용 (3가지)
상의에서 나올 수 있는 경우의 수 - 긴팔 착용/ 민소매 착용/ 미착용 (3가지)
하의에서 나올 수 있는 경우의 수 - 미디 착용/ 슬랙스 착용/ 숏팬츠 착용 /미착용 (4가지)
따라서, 3 x 3 x 4 = 36 인데, 반드시 하나 이상을 착용한다고 했으므로 모두 미착용인 경우 1을 빼줘야 한다.
그럼 35가 되는데 위에서 한 말을 식으로 표현하면
(모자 갯수+1)(상의+1)(하의+1)-1 ===> 종류로 갯수에 접근 할 수 있도록 객체로 변환해 주고 구했다.
좋아요 가장 많은 다른 사람의 풀이
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.values() 가 객체의 key에 대한 값들만 배열로 만든 뒤 반환해 준다고 한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/values
'Web > Algorithm' 카테고리의 다른 글
2019 카카오 개발자 겨울 인턴십) 크레인 인형뽑기 게임 (0) | 2020.12.04 |
---|---|
[프로그래머스 > 해시] 베스트 앨범 (0) | 2020.06.23 |
[ 프로그래머스 > 정렬 ]H-Index (0) | 2020.04.25 |
[ 프로그래머스 > 해시] 완주하지 못한 선수 (0) | 2020.04.23 |
비트 카운팅 알고리즘 (0) | 2020.02.01 |