티스토리 뷰

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

 

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

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

programmers.co.kr

 

[문제 풀이]

 

1. n의 범위는 1 ~16이므로 O(n)으로 충분히 풀 수 있다.

2. 지도에 주어진 수를 이진수로 바꿨을 때 1인 부분이 벽, 0인 부분이 공백이다.

3. 둘 중에 하나라도 벽이면 벽이고, 둘 다 공백이면 공백이다.

4. 지도1, 지도 2에 주어진 수를 or연산을 해준 후, 이진수로 변경해준다.

5. 변경된 이진수에 1인 부분을 "#", 0인 부분을 " "으로 바꿔준다.

6. 모든 수를 변환했다면 반환한다.

 

[소스 코드]

 

import java.util.Arrays;

public class SecretMap {
    private static StringBuilder stringBuilder = new StringBuilder();

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

        System.out.println(Arrays.toString(solution(n, arr1, arr2)));
    }

    private static String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];

        for (int i = 0; i < n; i++) {
            answer[i] = binary(arr1[i] | arr2[i], n)
                    .replace("1", "#")
                    .replace("0", " ");
        }

        return answer;
    }

    private static String binary(int number, int n) {
        stringBuilder.setLength(0);

        while (number > 0) {
            stringBuilder.append(number % 2);
            number /= 2;
        }

        String binary = stringBuilder.reverse().toString();

        if (binary.length() < n) {
            stringBuilder.insert(0, "0".repeat(n - binary.length()));
        }

        return stringBuilder.toString();
    }
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함