プログラマーlv 1解題:秘密地図(ココア)


プログラマーlv 1解題:秘密地図(ココア)

問題の説明


秘密の地図


ニオは秘密の地図を手に持って、プロドが普段私房のお金を隠している場所を教えた.しかし、この秘密地図はデジタル暗号化されており、位置を確認するために解読が必要です.幸いなことに、地図のパスワードを解読する方法が書かれたメモも見つかった.
  • 地図の長さ  nの正方形の配列で、各セルは「空白」(""")または「壁」("#")の2種類で構成されています.
  • 全図は、2つの地図を重ね合わせることによって得ることができる.それぞれ「地図1」と「地図2」と言います.地図1または地図2のいずれかが壁である部分は、地図全体でも壁である.地図1も地図2も空白の部分であり、地図全体においても空白である.
  • 「地図1」と「地図2」はそれぞれ整数配列で暗号化されている.
  • 暗号化スキームは、地図の各横線上で  1、空白部分を  0に符号化したときに得られるバイナリ値の配列.

  • ニオがフロドの私房金を手に入れるために、秘密地図のパスワードを解読するのに役立つプログラムを作成しました.

    入力フォーマット


    マップの入力エッジサイズ  n  と2つの整数配列  arr1arr2が入ってきました.

  • 1 ≦  n  ≦ 16
  • arr1 ,  長さarr2  nの整数配列で与えられる.

  • 整数配列の各要素  xを2進数に変換した場合の長さは  n  より低いゼロ≤  x  ≦ 2 - 1に満足する.
    n
  • 出力フォーマット


    もとの秘密の地図を解読する  '#'공백からなる文字列配列に出力される.

    I/O例


    パラメータ値n 5 arr 1[9,20,28,18,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 result = [];
      // n * n 크기의 이차원배열을 생성하고 공백으로 채워준다.
      const secret_map = Array.from(Array(n), () => Array(n).fill(" "));
      let map1 = [];
      let map2 = [];
    
      for (let i = 0; i < n; i++) {
        // 10진수를 2진수로 바꾸어 준다.
        let split = arr1[i].toString(2).split("");
        // 길이를 맞춰주기 위해서 0을 앞에 추가
        while (split.length < n) {
          split.unshift("0");
        }
        let split2 = arr2[i].toString(2).split("");
        while (split2.length < n) {
          split2.unshift("0");
        }
        // map1에 푸시
        map1.push(split);
        map2.push(split2);
      }
    
      for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
          // mpa1에서 1이거나 map2에서 1이라면 벽이므로 #을 삽입해준다.
          if (map1[i][j] === "1" || map2[i][j] === "1") {
            secret_map[i][j] = "#";
          }
        }
        // 배열을 이어준다.
        // ex: ["#"," ","#","#","#"] => '# ###'
        result.push(secret_map[i].join(""));
      }
      //최종 출력
      return result;
    }