코린이의 소소한 공부노트

[프로그래머스/Lv.1] [1차] 비밀지도 본문

코딩테스트 풀이/JAVA

[프로그래머스/Lv.1] [1차] 비밀지도

무지맘 2022. 11. 22. 14:40

1. Input

1) 지도의 한 변 크기 n

2) 정수 배열 arr1

3) 정수 배열 arr2

4) 지도는 한 변의 길이가 n인 정사각형 배열 형태

5) 각 칸은 "공백"(" ") 또는 ""("#")이다.

 

2. Output

1) 비밀지도의 암호를 해독한 결과를 담은 “#”“ ”로 이루어진 문자열 배열

2) 지도1(arr1)과 지도2(arr2)를 겹쳐 전체 지도를 완성한다. 두 지도 중 하나라도 벽인 부분은 전체 지도에서 벽이고, 두 지도 모두 공백인 부분은 전체 지도에서도 공백이다.

3) 두 지도는 정수로 암호화되어있으며, 그 암호를 이진수로 바꿨을 때 각 가로줄에서 벽 부분이 1, 공백 부분이 0이다.

 

3. Constraint

1) 1 n 16

2) arr1, arr2는 길이 n인 정수 배열

3) 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. , 0 x 2n - 1을 만족한다.

 

4. Example

Input: n=5, arr1={9,20,28,18,11}, arr2={30,1,21,17,28} -> Output: {"#####","# # #", "### #", "# ##", "#####"}

설명:

 

5. Code

1) 첫 코드(2022/??)

String[] answer = new String[n];
int[] n1 = new int[n];
int[] n2 = new int[n];

for(int i=0 ; i<n ; i++){
    answer[i] = "";
    n1 = toBin(arr1[i], n);
    n2 = toBin(arr2[i], n);
    for(int j=0 ; j<n ; j++){
        if(n1[j]==0 && n2[j]==0) answer[i] += " ";
        else answer[i] += "#";
    }                
}
return answer;

// 이진수배열로 바꾸기
int[] toBin(int num, int n){
    int[] result = new int[n];
    int i = n-1;
    while(num>=1){
        result[i] = num%2;
        num /= 2; i--;
    }
return result;