[プログラマーレベル1]秘密地図回答



に質問


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

    📥 入力フォーマット


    地図に入る枠線のサイズnと2つの整数配列arr1arr2を入力します.
  • 1 ≦ n ≦ 16
  • arr1,arr2は整数配列であり、長さはnである.
  • 整数配列の各要素xをバイナリ数に変換した場合の長さn以下.すなわち、0≤|2 n-1を満たす.
  • 📤 出力フォーマット


    元の秘密マップを復号し、x'#'からなる文字列配列に出力します.

    🖨️ I/O例



    💡 に答える

    class Solution {
        public String[] solution(int n, int[] arr1, int[] arr2) {
            int[] arr = new int[n];
            
            for(int i = 0; i < n; i++) 
                arr[i] = arr1[i] | arr2[i];
            
            String[] answer = new String[n];
     
            for(int i = 0; i < n; i++) {
                String result = "";
                for(int j = 0; j < n; j++) {
                    if(arr[i] % 2 == 1)
                        result = "#" + result;
                    else
                        result = " " + result;
                    arr[i] /= 2;
                }
                
                answer[i] = result;
            }
            
            return answer;
        }
    }

    ✏️ comment


    `arr[i] = arr1[i] | arr2[i];'なんで計算に通るとは思わなかったんだろう…!