[프로그래머스] 17681. 비밀지도

1 분 소요

문제 링크

[프로그래머스] 17681. 비밀지도


풀이 과정

두 지도를 겹쳐 새로운 지도를 만드는데, 각 지역이 두 지도 중 하나라도 벽이면 벽을, 둘 다 공백이면 공백을 나타낸다는 점에서 OR 연산임을 알았습니다. toBinaryString 메소드를 통해 숫자를 2진수로 변환했고, 각각 0과 1을 공백(‘ ‘)과 벽(‘#’)으로 변경했습니다. 변환된 2진수가 n자리가 안될 수 있으므로 자리 맞춤을 위해 앞에 0을 넣어 줬습니다.

또한, String 클래스의 format 메소드를 통해 부족한 자리는 공백으로 채워넣을 수 있다는 점을 알 수 있었습니다. 시간은 while 문을 활용한 쪽이 훨씬 빨랐습니다.

answer[i] = String.format("%" + n + "s", answer[i]);

while 문을 통해 자리가 맞을 때까지 앞에 공백을 추가한 코드

String.format 을 사용해 n 자리수에 맞게 앞에 공백을 추가한 코드


코드

public class Main {
    public static String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[arr1.length];

        for (int i = 0; i < arr1.length; i++) {
            int num = arr1[i] | arr2[i];
            answer[i] = Integer.toBinaryString(num);

            answer[i] = answer[i].replace("1", "#");
            answer[i] = answer[i].replace("0", " ");

            while (answer[i].length() != n)
                answer[i] = " " + answer[i];
        }

        for (String s : answer)
            System.out.println(s);

        return answer;
    }

    public static void main(String[] args) {
//        int n = 5;
//        int[] arr1 = {9, 20, 28, 18, 11};
//        int[] arr2 = {30, 1, 21, 17, 28};

        int n = 6;
        int[] arr1 = {46, 33, 33, 22, 31, 50};
        int[] arr2 = {27, 56, 19, 14, 14, 10};

        solution(n, arr1, arr2);
    }
}

카테고리:

업데이트:

댓글남기기