[プログラマー]2018 KAKAO BLIND RECRUIMENT秘密地図-java


2018 KAKAO BLIND RECRUITMENT-秘密地図


💡 問題の説明


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

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

    💡 入力フォーマット


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


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

    🔑 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]出力[######################################################################################

    💻 コードの作成-java


    TOBinaryString()メソッドhttps://velog.io/@imok-/integer-クラスのメソッドを使用
    class Solution {
    	public String[] solution(int n, int[] arr1, int[] arr2) {
    		String[] answer = new String[n];
    
    		for (int i = 0; i < n; i++) {
    
    			String ans = Integer.toBinaryString(arr1[i] | arr2[i]); // 이진수로 비트 논리 연산
    			ans = ans.replaceAll("1", "#");
    			ans = ans.replaceAll("0", " ");
    			answer[i] = ans;
    			while (answer[i].length() < n) {
    				answer[i] = ' ' + answer[i];
    			}
    		}
    		return answer;
    	}
    }

    🔗 質問リンク


    [プログラマー-[第1ラウンド]秘密地図
    https://programmers.co.kr/learn/courses/30/lessons/17681