https://programmers.co.kr/learn/courses/30/lessons/42578
나의 풀이
function solution(clothes) {
var answer = 1;
var answerArr = new Array();
var type = new Array();
for(var i = 0; i < clothes.length; i++) {
type[i] = clothes[i][1];
}
var uniqueType = type.reduce((acc,curr) => acc.includes(curr) ? acc : [...acc,curr],[]);
for(var i = 0; i < uniqueType.length; i++) {
answerArr[i] = 0;
for(var j = 0; j < clothes.length; j++) {
if(uniqueType[i] == clothes[j][1]) {
answerArr[i] += 1;
}
}
}
answerArr.forEach((c) => answer *= (c + 1));
return answer - 1;
}
- 주어진 2차원 배열에서 옷의 종류만 뽑는다
- 옷의 종류를 reduce 함수를 사용해 중복제거 한다
- 각 종류 마다의 옷의 개수를 count한 배열을 만든다
- 각 옷들을 입지 않을 경우의 수를 고려해 각 원소마다 1을 더해 모두 곱하고
- 그 값에서 아무것도 입지 않을 경우를 제외하기 위해 -1 을 한 후 리턴한다
다른 사람의 풀이
function solution(clothes) {
let answer = 1;
let hashTable ={};
for(let i of clothes){
hashTable[i[1]] = (hashTable[i[1]] || 1) + 1;
}
//consonle.log(hashTable);
//{headgear: 3, eyewear: 2}
for(let i in hashTable){
answer *= hashTable[i];
}
return answer -1;
}
- HashTable은 key를 통해 인덱싱을 하므로 배열의 뒷 원소를 기준(key)으로 잡는다
- 아직 존재하지 않는 key이면 index를 추가한 뒤 1을 더하고(+2),
- key값이 이미 존재하면 그냥 1만 더한다 (+1)
- HashTable안의 값들을 모두 곱한 후 -1을 한 후 리턴한다
Things to Learn
- hashtable에 대한 내용은 아래 포스팅을 참고함
- 경우의 수 구하는 공식...
- map을 써도 구현 가능함
'Algorithms & CS' 카테고리의 다른 글
[Python] 프로그래머스 - 가장 큰 수 (0) | 2021.08.09 |
---|---|
동적계획법(Dynamic Programming) - 피보나치 숫자 (0) | 2020.11.12 |
자바 메모리 구조 이해하기 - Stack, Heap (0) | 2019.07.30 |
[Java] 프로그래머스 - 같은 숫자는 싫어 (0) | 2019.07.18 |
[JAVA] 프로그래머스 - 가운데 글자 가져오기 (0) | 2019.07.16 |