코딩테스트/Programmers

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

grove1212 2025. 2. 28. 17:45

 

1. 시간이 빠른 풀이

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        StringBuilder sb;

        for(int i =0 ;i < n; i++){
            String s1 = Integer.toBinaryString(arr1[i]);
            String s2 = Integer.toBinaryString(arr2[i]);
            
            if(s1.length() < n) s1 = "0".repeat(n - s1.length()) + s1;
            if(s2.length() < n) s2 = "0".repeat(n - s2.length()) + s2;
            
            sb = new StringBuilder();
            for(int j = 0 ; j<n ; j++){
                if(s1.charAt(j) == '1' || s2.charAt(j) == '1') sb.append("#");
                else sb.append(" ");
            }
            
            answer[i] = sb.toString();
        }
        return answer;
    }
}

 

 

 

2. 가독성 높은 풀이

 

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        StringBuilder sb;

        for(int i =0 ;i < n; i++){
            answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
            answer[i] = String.format("%" + n + "s", answer[i])
                     .replace('1', '#')
                     .replace('0', ' ');
        }
        return answer;
    }
}

 

 

3. 다른 분 풀이

 

변수로 두는 것보다 상수로 놓고 자르는 게 훨씬 빠르다는 이점이 있다.

그러나 해당 풀이는 StringBuilder를 사용할 수 없는 풀이이다.

substring(), replaceAll() 함수 등은 String에만 존재하는 함수이다.

class Solution {
  public String[] solution(int n, int[] arr1, int[] arr2) {
      String[] answer = new String[n];
      String temp;

      for(int i = 0 ; i < n ; i++){
          temp = String.format("%16s", Integer.toBinaryString(arr1[i] | arr2[i]));
          temp = temp.substring(temp.length() - n);
          temp = temp.replaceAll("1", "#");
          temp = temp.replaceAll("0", " ");
          answer[i] = temp;
      }

      return answer;
  }
}