본문 바로가기

Algorithm/Programmers

[2018 KAKAO BLIND RECRUITMENT][문자열 처리] [1차] 비밀지도 - Java

문제 바로가기

 

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

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

programmers.co.kr

입력으로 들어오는 숫자들을 토대로 지도를 만드는 문제입니다.

class Solution {
    public static 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]);
            answer[i] = String.format("%" + n + "s", answer[i]);
            answer[i] = answer[i].replaceAll("1", "#");
            answer[i] = answer[i].replaceAll("0", " ");
        }
        return answer;
    }
}

10진수로 입력들어오는 숫자를 2진수로 바꾼게 지도가 되고, 두 지도를 합쳐서 두 지도 중 하나라도 벽인 부분은 전체 지도에서도 벽이 됩니다.

 

이 때, 자바의 Integer 클래스에는 toBinaryString() 이라는 아주 유용한 메소드가 있습니다.

파라미터로 10진수를 넣으면 2진수로 변환된 String을 리턴해줍니다.

자매품으로는 toOctalString(), toHexString() 이 있습니다..

 

여기서 우리는 길이가 n인 문자열을 갖고 와야 하므로 String 클래스의 format() 메소드로 문자열의 크기를 지정해줍니다.

n=5일 때, String.format("%5s", answer[i]); 이렇게 되면 왼쪽에 " "을 넣어 길이가 5인 문자열로 변환해줍니다. 오른쪽에 빈 칸을 넣고 싶으면 %-5s 하면 되겠져.

 

 

그러고 1을 벽(#), 0을 공백으로 나타내어 리턴해주면 됩니다..

 

 

감사합니당. ^_^