[JavaScript][Programmers] 위장
🔎 위장
❓ 문제링크
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개 테스트 케이스에서 시간초과 발생.
그래서 다른 방법을 찾다가 수학적으로 접근하여 간단하게 풀 수 있는 문제였음.
Author And Source
이 문제에 관하여([JavaScript][Programmers] 위장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cjh951114/JavaScriptProgrammers-위장저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)