[프로그래머스] Lv1. 1차지도

문제 설명

비밀지도

Neo는 Frodo가 보통 비상 자금을 어디에 숨기는지 알려주는 비밀 지도를 받았습니다. 하지만 이 비밀 지도는 숫자로 암호화되어 있기 때문에 위치를 파악하기 위해서는 복호화를 거쳐야 합니다. 운 좋게도 카드 코드를 해독하는 방법에 대한 지침이 포함된 메모도 찾았습니다.

  1. 카드 한 면의 길이는 n-제곱 배열의 형태로 각 셀은 “방”(” “) 또는 “벽”(“#”)의 두 가지 유형으로 구성됩니다.
  2. 전체 지도는 ​​두 개의 지도를 겹쳐서 얻을 수 있습니다. 각각 “카드 1″과 “카드 2″라고 부르겠습니다. 맵 1 또는 맵 2에서 벽인 부분은 전체 맵에서도 벽입니다. 지도 1과 지도 2 모두에서 비어 있는 영역은 전체 지도에서도 비어 있습니다.
  3. 맵 1과 맵 2는 각각 정수 배열로 인코딩됩니다.
  4. 뒤섞인 배열은 지도의 각 수평선에서 벽 부분을 식별합니다. 1, 빈 부분 0으로 인코딩했을 때 얻은 이진수에 해당하는 값의 배열입니다.

[프로그래머스] Lv1. 1차지도 1

Neo가 Frodo의 비상 자금을 얻을 수 있도록 비밀 지도를 해독하는 데 도움이 되는 프로그램을 작성하세요.

입력 형식

지도 페이지의 입력 크기 N 두 개의 정수 배열 도착1, arr2가 들어옵니다.

  • 1 ≦ N ≦ 16
  • 도착1, arr2는 길이 n 정수의 배열로 지정됩니다.
  • 정수 배열의 각 요소 x의 이진 길이는 N 즉, 0 ≤ 엑스 ≤ 2n – 성취 1.

출력 형식

원본 비밀 지도를 해독하여 ‘#’, 공백으로 구성된 문자열 배열로 출력합니다.

I/O 예시

매개변수 값

N 5
도착1 (9, 20, 28, 18, 11)
도착2 (30, 1, 21, 17, 28)
누르다 (“#####”,”####”,”####”,”###”,”#####”)

매개변수 값

N 6
도착1 (46, 33, 33, 22, 31, 50)
도착2 (27:56, 19, 14, 14, 10)
누르다 (“######”, “### #”, “## ##”, “####”, “#####”, “### # “)

내 솔루션

public String() solution(int n, int() arr1, int() arr2) {
   String() answer = new String(n);
   
   for (int i = 0; i < n; i++)
   {
      answer(i) = Integer.toBinaryString(arr1(i) | arr2(i))
            .replace("1", "#")
            .replace("0", " ");
      
      while (answer(i).length() < n)
      {
         answer(i) = ' ' + answer(i);
      }
      
   }
   
   return answer;
}

이 문제는 비트 연산과 관련이 있으며 모든 이진 값을 계산하고 OR 연산을 수행할 수 있습니다.

Integer.toBinaryString(a | b)는 a와 b에 대해 or 연산을 수행하여 얻은 값을 반환합니다.

그리고 이 값으로 이제 1을 #으로, 0을 공백으로 바꿀 수 있다고 생각했습니다…

예전에 풀때 같은 부분에서 막혔는데도 생각이 안나서 그때 제대로 풀지 못한거 같네요.

어쨌든 이번에는 문제가 6자리인데 계산 결과가 6자리 미만입니다.

지금까지는 answer(i)의 길이가 n보다 작으면 자릿수에 맞게 공백이 앞에 추가됩니다.