[プログラマー]秘密地図-Javascript
13025 ワード
問題の説明
秘密の地図
ニオは秘密の地図を手に持って、プロドが普段私房のお金を隠している場所を教えた.しかし、この秘密地図はデジタル暗号化されており、位置を確認するために解読が必要です.幸いなことに、地図のパスワードを解読する方法が書かれたメモも見つかった.
ニオがフロドの私房金を手に入れるために、秘密地図のパスワードを解読するのに役立つプログラムを作成しました.
入力フォーマット
地図に入るエッジサイズnと2つの整数配列arr 1とarr 2を入力します.
出力フォーマット
I/O例
パラメータ値n 5 arr 1[9,20,28,17,11]arr 2[30,1,21,17,28]出力[#########################################################]
パラメータ値n 6 arr 1[46,33,33,22,31,50]arr 2[27,56,19,14,14,10]出力[######################################################################################
に答える
function solution(n, arr1, arr2) {
let answer1 = [];
let answer2 = [];
for (let i = 0; i < n; i++) {
// 지도 1
let num1 = arr1[i].toString(2);
let result1 = [];
// 부족한 배열의 길이만큼 0 push
for (let j = 0; j < n - num1.length; j++) {
result1.push(0)
}
// 2진수 순서대로 push
for (let j = 0; j < num1.length; j++) {
result1.push(num1[j])
}
answer1.push(result1);
// 지도 2
let num2 = arr2[i].toString(2);
let result2 = [];
for (let j = 0; j < n - num2.length; j++) {
result2.push(0)
}
for (let j = 0; j < num2.length; j++) {
result2.push(num2[j])
}
answer2.push(result2);
}
let correct = [];
for (let i = 0; i < n; i++) {
let temp = "";
for (let j = 0; j < n; j++) {
// 둘 중의 하나라도 1이면 "#"추가
parseInt(answer1[i][j]) !== 0 || parseInt(answer2[i][j]) !== 0 ? temp += "#" : temp += " ";
}
correct.push(temp);
}
return correct;
}
まず,地図1と地図2を二重forゲートを用いて図中の二次配列に従う.入力した数字をバイナリに変更し,1つの配列を形成してpushを行う.
その後、2つの配列の同じ位置に1つの値がある場合は、"#"を追加して正しい配列を作成します.
他人の解答
function solution(n, arr1, arr2) {
return arr1.map((a,i)=>(a|arr2[i]).toString(2).padStart(n,0).replace(/0/g,'').replace(/1/g,'#'))
}
上記の解答ではmap法を用いてarr 1を繰り返し,配列中の要素aと配列中の要素aのインデックスを求め,arr 2中のインデックスと比較した.ここで、a|arr 2[i]はOR演算を行う.ビット演算では|を用い,ビットの論理和を求めることができる.ビットロジックを求めた後、padStartで0を埋め、正規表現を使用してグローバルで0と1を検索し、replaceメソッドを使用して0を「,1を返す」を「#」に戻します.
Reference
この問題について([プログラマー]秘密地図-Javascript), 我々は、より多くの情報をここで見つけました https://velog.io/@le12352/프로그래머스-비밀지도-Javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol