[PS]秘密地図(LV 1)


プログラマレベル1


秘密の地図


ニオは秘密の地図を手に持って、プロドが普段私房のお金を隠している場所を教えた.しかし、この秘密地図はデジタル暗号化されており、位置を確認するために解読が必要です.幸いなことに、地図のパスワードを解読する方法が書かれたメモも見つかった.
  • 地図は、"공백"(" ")または"벽"("#")の2つのタイプからなるエッジ長nの正方形配列形態である.
  • 全図は、2つの地図を重ね合わせることによって得ることができる.それぞれ「地図1」と「地図2」と言います.地図1または地図2のいずれかが壁である部分は、地図全体でも壁である.地図1も地図2も空白の部分であり、地図全体においても空白である.
  • 「地図1」と「地図2」はそれぞれ整数配列で暗号化されている.
  • 暗号化配列は、地図の横線ごとに部分を1部分に符号化し、공백部分を0に符号化したときに得られるバイナリ数に対応する値の配列である.
  • 地図に入るエッジサイズnと2つの整数配列arr 1とarr 2を入力します.
  • 1 ≦ n ≦ 16
  • arr 1,arr 2は長さnの整数配列である.
    整数配列の各要素xが2進数に変換されたときの長さはn以下である.すなわち0⊥⊥⊥⊥⊥2 n−1を満たす.
  • に答える

    function solution(n, arr1, arr2) {
      // 답을 담을 배열선언
      let s_map = [];
    
      // 들어온 각 두배열을 비트 or 연산을한다
      arr1.forEach((e, i) => {
        s_map.push(e | arr2[i]);
      });
    
    
      // 비트연산이 끝난 배열을 map 메소드를통해 연산시작
      s_map = s_map.map((e) => {
          // 이진수형태의 String으로 변환
        e = e.toString(2);
        // 만약 n의 길이보다 짧다면 n의길이만큼 앞을 0으로 채워준다
        if (e.length !== n) {
          e = e.padStart(n, "0");
        }
        // 최종적으로 변환된 String형태를 배열로 분할해 새로운배열로 반환해준다
        e = e.split("").map((ele) => {
            // 0이면 공백
          if (ele === "0") {
            return " ";
          } else {
              // 1이면 벽
            return "#";
          }
        });
        // 합쳐준다
        e = e.join("");
        // 최종적으로 변환이 끝난 이진수를 반환해준다
        return e;
      });
    
      // 정답 반환
      return s_map;
    }

    の最後の部分


    ビット演算と進数変換法で簡単に解決できる問題xあるので、もっと簡単に解けます.