https://programmers.co.kr/learn/courses/30/lessons/17681

 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr

 

 

문제 분석

- 입력받은 배열 두 개를 활용하여 정답 배열을 만들어내는 문제이다.

- 10진수로 입력받은 숫자들을 Integer.toBinaryString()함수를 통해 2진수로 변경하여 암호를 해독한다.

 

 

문제 풀이

1. 10진수 n자리가 들어있는 배열 두 개를 for문을 통해 각 자리별로 한 줄씩 처리한다.

2. 10진수는 Integer.toBinaryString()함수를 통해 2진수로 변경하고, makeEqual이라는 함수를 생성하여 n자리 수로 맞춰준다. (n이 5고 2진수로 변경한 값이 1인 경우 00001로 변경시킨다)

3. 만약 양쪽 배열에서 각 자리의 숫자가 모두 0인 경우 공백이기때문에 " "처리하고, 아닌 경우 벽이기때문에 "#"으로 처리한다.

4. 각 자리별로 계산을 완료하면 정답 배열에 넣고 리턴한다.

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        
        for(int i=0;i<n;i++){
            String map1 = Integer.toBinaryString(arr1[i]);
            String map2 = Integer.toBinaryString(arr2[i]);
            
            String newMap1 = makeEqual(n, map1);
            String newMap2 = makeEqual(n, map2);
            
            String tempAnswer = "";
            for(int j=0;j<n;j++){
                if(newMap1.charAt(j)=='0' && newMap2.charAt(j)=='0'){ // 공백
                    tempAnswer += " ";
                }else{ // 벽
                    tempAnswer += "#";
                }
            }
            answer[i] = tempAnswer;
        }
        return answer;
    }
    
    // 자리 수를 맞춰주는 함수
    static String makeEqual(int n, String map){
        String temp = "";
        
        for(int i=0;i<n-map.length();i++){
            temp += "0";
        }
        temp += map;
        
        return temp;
    }
}

 

 

https://github.com/SOEUN2/Algorithm