変装する
1.変装術!
これは問題です.服の種類と服があれば、どのくらいの場合の数を見つけることができますか.例えば、以下の服が与えられたとします.let clothes = [
["yellowhat", "headgear"],
["blackhat", "headgear"],
["yellowsunglasses", "eyewear"],
["green_turban", "headgear"],
["yellowsunglasses", "eyewear"],
["sandle", "shoes"],
["sandle", "shoes"],
["orange_turban", "headgear"],
["sandle", "shoes"],
["bluesunglasses", "eyewear"],
["sandle", "shoes"],
["sandle", "shoes"],
];
ここで帽子やメガネ、靴を交換しても変装に成功します.だから、黄色いhat+green turban+sandleを着て、翌日青いサングラスに着替えると、変装に成功します.
2.方法
これはまずhashを作成し、各服をキーとし、対応する服の数をvalueとする必要があります.次に、服の種類の数に(신발/모자 or 신발/안경 ...
)キーを乗じた値を求める.つまり、まず服装の種類に局所集合をして、その集合の値を乗じてからやります!前回局所集合を行い,それを適用して解いた.
let clothes = [
["yellowhat", "headgear"],
["blackhat", "headgear"],
["yellowsunglasses", "eyewear"],
["green_turban", "headgear"],
["yellowsunglasses", "eyewear"],
["sandle", "shoes"],
["sandle", "shoes"],
["orange_turban", "headgear"],
["sandle", "shoes"],
["bluesunglasses", "eyewear"],
["sandle", "shoes"],
["sandle", "shoes"],
];
これはまずhashを作成し、各服をキーとし、対応する服の数をvalueとする必要があります.次に、服の種類の数に(
신발/모자 or 신발/안경 ...
)キーを乗じた値を求める.つまり、まず服装の種類に局所集合をして、その集合の値を乗じてからやります!前回局所集合を行い,それを適用して解いた.作成
function mySolution(clothese) {
// setting
let clothesHash = [];
let closet = [];
let subSum = 1;
let finalSum = 0;
let calculate = false;
let temp = [];
let answer = [];
for (let i = 0; i < clothes.length; i++) {
clothesHash[clothes[i][1]]
? (clothesHash[clothes[i][1]] = ++clothesHash[clothes[i][1]])
: (clothesHash[clothes[i][1]] = 1);
}
for (let i in clothesHash) {
closet.push([i, clothesHash[i]]);
}
let checkArr = Array.from({ length: closet.length }, () => 0);
// subset
function subset(type) {
if (type > closet.length - 1) {
// checkArr에 따라서 옷종류를 고르고 있음
for (let i = 0; i < checkArr.length; i++) {
if (checkArr[i] === 1) {
subSum *= closet[i][1];
calculate = true;
}
}
// 고른 옷에 해당되는 옷의 갯수를 곱해서 경우의 수를 구하고 누적
if (calculate) {
finalSum += subSum;
subSum = 1;
calculate = false;
} else {
subSub = 0;
}
} else {
checkArr[type] = 1;
subset(type + 1);
checkArr[type] = 0;
subset(type + 1);
}
}
subset(0);
return finalSum;
}
checkAr,対応する衣服の種類の個数,finalSum,subSum,closter,closeHash出力は以下の通りである.// closet
["headgear", 4]
["eyewear", 3]
["shoes", 5]
// clothesHash
eyewear: 3
headgear: 4
shoes: 5
//checkArr, 그에 해당되는 옷의 종류의 갯수, finalSum, subSum
checkArr: (3) [1, 1, 1] (headgear, eyewear, shoes를 모두 선택하는 경우)
그에 해당되는 옷의 종류의 갯수: (3) [4, 3, 5]
finalSum: 60 / subSum: 60
(3) [1, 1, 0]
(2) [4, 3]
72 12
(3) [1, 0, 1]
(2) [4, 5]
92 20
(3) [1, 0, 0]
[4]
96 4
(3) [0, 1, 1]
(2) [3, 5]
111 15
(3) [0, 1, 0]
[3]
114 3
(3) [0, 0, 1]
[5]
119 5
// 아무것도 안입은 경우
(3) [0, 0, 0]
[]
ちょっと複雑でしたが、できました!!ましてや、私が学んだことを使って、答えを出しました.これは本当に勉強と成長です.助けてくれた人たちに本当に感謝します.でももっときれいにできる方法もあります.
function otherSolution(clothes) {
let answer = 1;
let obj = {};
for (let i = 0; i < clothes.length; i++) {
obj[clothese[i][1]] = (obj[clothese[i][1]] || 1) + 1;
}
for (let key in obj) {
answer *= obj[key];
}
return answer - 1;
}
驚くほどきれいになり、薬水の個数を求める公式のようになりました.約数
上記の内容をよく参考にしてほしい.一言、h^4 e^3 s^5に乗じた場合の数字でいいです.headgear眼鏡の靴は何ですか?彼らが何人いるかを見つけて、平均ペアの数を求めます.
答え-1では-1は1としかペアにならない、つまりここでは何も着ていない.
薬水を求める個数を思いついたなんて...入力と経験値が大きいと,このような考えを行う確率が高くなるようだ.
あるいはすべての場合の数字は表で可視化され、そこでルールが見つかります!それは複雑ではありません.単純になりました.
肝心なのは簡単にすることです!
先に解いて整理してから応用しましょう.
Reference
この問題について(変装する), 我々は、より多くの情報をここで見つけました https://velog.io/@yhko1992/변장하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol