[プログラマーlv.2]JSに偽装
✉ Question
🔗 質問リンク
問題の説明
スパイたちは毎日違う服を着て自分を偽装している.
例えば、スパイの服が以下のように、今日スパイが丸い眼鏡、長いコート、青いTシャツを着ている場合は、翌日はジーンズを追加したり、黒いサングラスをかけたりして、丸い眼鏡ではありません.
タイプ|名前
サングラス
上着
ジーンズ
コート着
スパイが持っている服に二次元配列の服が与えられた場合、異なる服の組み合わせの数を返すために解関数を作成します.
せいげんじょうけん
💌 Answer
ハッシュ問題
1️⃣ ハッシュマッピングとしてobjectを使用する
1.kinds
配列で指定された衣類の種類を全て入れた後、obj
をキーとし、可能な場合は数量を値とする(当該衣類を全く選択しない場合を考慮すると初期値は2).
2.obj
からケース数にcombination
を乗じると、可能なすべての組合せ数が得られる.
3.问题のうち少なくとも1枚は着なければならないが、1枚も着ていない场合を除き、answer
に返事する.function solution(clothes) {
let answer = 0;
let combination = 1;
let kinds = [];
for(let i = 0; i < clothes.length; i++) {
kinds.push(clothes[i][1]);
}
let obj = kinds.reduce((cnt, element) => {
if(cnt[element]) {
cnt[element] += 1;
}else {
cnt[element] = 2;
}
return cnt;
}, {});
for(let key in obj) {
combination *= obj[key];
}
answer = combination - 1;
return answer;
}
2️⃣ Mapを使用したハッシュの作成map
において、種類をキーとし、場合の数を値とし、これらの値を取り出して組合せを乗じ、すべての組合せの数を求める.何も着ない場合を除き、answer
に戻ります.function solution(clothes) {
let answer = 0;
let combination = 1;
let map = new Map();
for(let i = 0; i < clothes.length; i++) {
if(!map.get(clothes[i][1])) map.set(clothes[i][1], 2);
else map.set(clothes[i][1], map.get(clothes[i][1]) + 1);
}
for(let v of map.values()) {
combination *= v;
}
answer = combination - 1;
return answer;
}
.
.
.
解法は同じですが、mapはvalueを直接ポップアップできるので、コードはもっと簡単になったようです!
この組み合わせ問題は問題を解く前に制限条件をよく見て、方向を把握することが重要で、多くの時間を費やしました.💨
他の解題方法を考えてみるのもいいですね.🙄
Reference
この問題について([プログラマーlv.2]JSに偽装), 我々は、より多くの情報をここで見つけました
https://velog.io/@young18/프로그래머스-lv.2-위장-by-JS
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
function solution(clothes) {
let answer = 0;
let combination = 1;
let kinds = [];
for(let i = 0; i < clothes.length; i++) {
kinds.push(clothes[i][1]);
}
let obj = kinds.reduce((cnt, element) => {
if(cnt[element]) {
cnt[element] += 1;
}else {
cnt[element] = 2;
}
return cnt;
}, {});
for(let key in obj) {
combination *= obj[key];
}
answer = combination - 1;
return answer;
}
function solution(clothes) {
let answer = 0;
let combination = 1;
let map = new Map();
for(let i = 0; i < clothes.length; i++) {
if(!map.get(clothes[i][1])) map.set(clothes[i][1], 2);
else map.set(clothes[i][1], map.get(clothes[i][1]) + 1);
}
for(let v of map.values()) {
combination *= v;
}
answer = combination - 1;
return answer;
}
Reference
この問題について([プログラマーlv.2]JSに偽装), 我々は、より多くの情報をここで見つけました https://velog.io/@young18/프로그래머스-lv.2-위장-by-JSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol