(Java)프로그래머스 - [1차] 비밀지도

윤준혁·2024년 3월 13일

나의 풀이

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        
        for (int i = 0; i < n; i++) answer[i] = ""; // 1
        
        String[] arr1_s = new String[n]; // 2
        String[] arr2_s = new String[n];
        
        for (int i = 0; i < n; i++) {
            String s1 = Integer.toBinaryString(arr1[i]); // 3
            if (s1.length() < n) {
                while (s1.length() < n) {
                    s1 = "0" + s1;
                }
            }
            s1 = s1.replace("1", "#"); // 4
            s1 = s1.replace("0", " ");
            arr1_s[i] = s1;
            
            String s2 = Integer.toBinaryString(arr2[i]);
            if (s2.length() < n) {
                while (s2.length() < n) {
                    s2 = "0" + s2;
                }
            }
            s2 = s2.replace("1", "#");
            s2 = s2.replace("0", " ");
            arr2_s[i] = s2;
            
            for (int j = 0; j < n; j++) {  // 5
                if (arr1_s[i].charAt(j) == '#' || arr2_s[i].charAt(j) == '#') answer[i] += "#";
                else answer[i] += " ";
            }
        }
        
        return answer;
    }
}

과정

  1. answer의 길이를 n으로 초기화하고, answer의 모든 요소를 초기화한다(초기화 전엔 null이 기본적으로 들어감)
  2. int 배열 arr1과 arr2를 2진수로 변환해서 저장할 배열arr1_s와 arr2_s를 선언
  3. arr의 i번째 요소를 2진수로 변환하고, 변환한 길이가 n보다 작다면 n과 같아질 때까지 앞에 0을 붙여준다
  4. 1이면 #으로 0이면 공백으로 변환한 후 선언했던 arr1_s의 i번째에 넣어준다 (arr2도 반복)
  5. arr1_s와 arr2_s의 j번째 문자가 둘 중 하나라도 #이라면 #을 answer[i]에 더해주고, 아니면 공백을 더해준다

다른 사람 풀이

class Solution {
  public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] result = new String[n];
        for (int i = 0; i < n; i++) {
            result[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
        }

        for (int i = 0; i < n; i++) {
            result[i] = String.format("%" + n + "s", result[i]);
            result[i] = result[i].replaceAll("1", "#");
            result[i] = result[i].replaceAll("0", " ");
        }

        return result;
    }
}

0개의 댓글