https://programmers.co.kr/learn/courses/30/lessons/42578
function solution(clothes) {
let answer = 1;
let result = {};
for (var i = 0; i < clothes.length; i++) {
result[clothes[i][1]] = (result[clothes[i][1]] || 1) + 1;
// console.log(result[clothes[i][1]])
}
// console.log(result);
for (var key in result) {
answer *= result[key];
}
return answer - 1;
}
입력이
[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]
이렇게 들어오는데
result[clothes[i][1]] = (result[clothes[i][1]] || 1) + 1;
이 때 뒤에오는 타입들을 key값으로 같은게 오게되면 +1을함.
해당 key가 없으면 1, 있으면 해당key의 값에 +1.
처음 1에다가 +1하는 이유는 고를 때 없는 경우를 생각한 것.
없는경우 까지 생각했기 때문에 마지막에는 전부 안 입는 경우가 생기기 때문에 answer에 -1을 해줌.
result값
{ headgear: 3, eyewear: 2 }
headegear : yellow, green, X
eyewear : blue, X
yellow, blue / yellow,x / green, blue / green, X / X, blue / X, X
이렇게 6가지.
마지막에 선택하지 않는 경우 -1.
function solution(clothes) {
let result = {}
for (var i = 0; i < clothes.length; i++) {
[name, type] = clothes[i];
result[i] = {
type,
name,
}
}
let resArr = Object.entries(result);
let answer = 0;
for (let i = 1; i <= resArr.length; i++) {
dfs(resArr, 0, [], i)
answer += answers.length
answers.splice(0);
}
return answer;
}
let answers = [];
let typeArr = new Set();
function dfs(nums, num, arr, tlen) {
if (num == tlen) return answers.push([...arr]);
else {
for (let i = 0; i < nums.length; i++) {
if (typeArr.has(nums[i][1].type)) continue;
else {
typeArr.add(nums[i][1].type);
arr.push(nums[i])
dfs(nums.slice(i + 1), num + 1, arr, tlen)
typeArr.delete(nums[i][1].type);
arr.pop()
}
}
}
}
객체에 인덱스별로 타입과 key를 저장하여 객체안의 값들로 조합을 찾아 저장하고, 그 조합이 들은 answers의 길이를 답으로 출력하려 하였음.
그러나 제출 시 5개 테스트 케이스에서 시간초과 발생.
그래서 다른 방법을 찾다가 수학적으로 접근하여 간단하게 풀 수 있는 문제였음.