알고리즘

프로그래머스 - 비밀지도

계양 꿀주먹 2024. 4. 12. 18:18

 


 

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        
        String[] binary1 = new String[n];
        String[] binary2 = new String[n];
        
        for(int i = 0; i < n; i++) binary1[i] = Integer.toString(arr1[i], 2);
        for(int i = 0; i < n; i++) binary2[i] = Integer.toString(arr2[i], 2);
        
        for(int i = 0; i < n; i++) {
            StringBuilder sb = new StringBuilder();
               
            // ex) 9 = 1001 이므로 앞에 빈 0 채워주기
            if(binary1[i].length() < n) binary1[i] = plusZero(binary1[i], n);
            if(binary2[i].length() < n) binary2[i] = plusZero(binary2[i], n);
            
            System.out.println(binary1[i]);
            
            
            for(int j = 0; j < n; j++) {
                if(binary1[i].charAt(j) == '1' || binary2[i].charAt(j) == '1') sb.append('#');
                else sb.append(' ');
            }

            answer[i] = sb.toString();
        }
        
        return answer;
    }
    
    public String plusZero(String binary, int n) {
        StringBuilder sb = new StringBuilder();
        
        for(int i = 0; i < n - binary.length(); i++) sb.append("0");
        sb.append(binary);
        
        return sb.toString();
    }
}

 

입력받은 숫자를 2진수로 변환하여, 1이면 # 0이면 공백으로 채운 두 문자열을 비교하여 둘 중 하나라도 #이 있다면 # 을 넣은 문자열 배열을 반환하는 문제였습니다.

 

코드가 깔끔하지 않지만,,, 먼저 입력받은 숫자를 2진수로 변환합니다. 이 때 문제가 발생하게 되는데
입력 예시처럼 n은 5일 때 입력받은 숫자가 9라면 2진수로 변환시 01001이 아닌 1001로 변환됩니다.

이를 해결하기 위해 메소드를 정의하여, n보다 변환한 숫자의 길이가 작을 때 앞에 0을 더하도록 만들었습니다.

이후에 각 2진수에서 1 이 있는지 비교하여 답을 반환했습니다.