Algorithm

[Programmers/Java] 비밀지도

patrck_jjh 2025. 3. 27. 21:07

 

 

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 


 

 

class Solution {
    
    public  static String toBinary(int n, int num) {
        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < n; i++) {
            sb.append(num%2);
            num = num/2;
        }

        return sb.reverse().toString();
    }
    
    public String[] solution(int n, int[] arr1, int[] arr2) {
        
        String[] answer = new String[n];
        
        for (int i=0; i < n; i++) {
            StringBuilder tmp_string = new StringBuilder();
            for (int j=0; j <n; j++){
                if ((toBinary(n, arr1[i]).charAt(j) == '0') && (toBinary(n, arr2[i]).charAt(j) == '0')) {
                    tmp_string.append(' ');
                } else {
                    tmp_string.append('#');
                }// end if
            }// end inner for
            answer[i] = tmp_string.toString();
        }// end outer fo
        
        
        return answer;
    }
}

 

  • 10진수를 2진수 String으로 변환하는 메서드 작성함
  • StringBuiler(or StringBuffer)는 String과 다르므로 .toString()으로 변환해줄 것
  • 생각나는대로 구현해보다 보니 길어짐

 

비트연산 활용(출제 의도)

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;
  }
}
  • Integer.toBinaryString()메서드로 이진수 변환
  • OR(|) 비트연산하여 1이 있다면 1로 수정
  • String.format() 메서드 활용해 16자리를 나타내는 String으로 저장
  • String.substring() 활용해 주어지는 n 자리수까지 잘라내기
  • String.replaceAll() 활용에 해당하는 문자 모두 바꿔줌