본문 바로가기
프로그래밍/알고리즘 문제풀이

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

by 노잼인간이라불립니다 2023. 8. 8.

1. 문제정의

 한 변의 길이와 2개의 숫자 배열이 주어지는데, 각 배열의 숫자들을 이진수로 변경했을 때 비트연산 or를 하여 최종적으로 1일경우 #, 0일 경우 " "로 바꾸어서 문자열로 출력 해야 한다.

 

2. 내가한시도

 문제를 읽고 비트연산이라는 것을 알아채고 Integer에서 제공해주는 toBinaryString 메서드를 이용해서 숫자들을 이진수문자열로 변경하였다. 

 이후 1은 "#"으로 replaceAll 해주었고, 0은 " "으로 replaceAll 해주었다.

 

3. code

public class Solution {

    public static String[] solution(int n, int[] arr1, int[] arr2) {

        String[] answer = new String[n];

        for (int i = 0; i < n; i++) {

            /*
             * 2진수로 바꿔서 #과 " "로 변경해줌
             */
            String s = Integer.toBinaryString(arr1[i] | arr2[i]);
            s = s.replaceAll("1", "#");
            s = s.replaceAll("0", " ");
            String length = "%" + n + "s";
            answer[i] = String.format(length, s);
        }

        return answer;
    }

}

4. 깨달은 점

 비트연산이라는 것만 알면 간단한 문제 였다. 직접 toBinaryString을 호출해서 String.format을 쓰게 되면 런타임 오류가 발생했는데, 그 문제의 원인을 알아내지 못한게 아쉽다.

 

참조

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