프로그래머스 비밀지도 JAVA

sundays·2022년 9월 16일
0

문제

비밀지도

풀이

1차 풀이

	/**
     * 암호해독
     * 
     * @param n    지도 한변의 크기
     * @param arr1 정수 배열
     * @param arr2 정수 배열
     * @return 원래의 비밀지도
     */
    public static String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        for (int i = 0; i < n; i++) {
            String s = Integer.toBinaryString(arr1[i] | arr2[i]);
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < n; j++) {
                if (s.charAt(j) == '1') {
                    sb.append("#");
                } else {
                    sb.append(" ");
                }
            }
            answer[i] = sb.toString();
        }
        return answer;
    }

이 풀이의 가장 큰 문제점이 있다
제일 앞의 숫자가 0이 나오는 경우 Integer.toBinaryString 는 공백을 반환한다 예를들면 011000 인경우 11000 이 출력되는 오류이다
그런데 진짜 이렇게 간단하고 좋은 풀이를 발견했다

  1. 공백 반환의 경우 포맷 변환 하면 됨
s = String.format("%"+n+"s",str);
  1. for 문 대신 replaceAll 을 써주면 더욱 깔끔하다.
s = s.replaceAll("1" , "#");
s = s.replaceAll("0" , " ");

전체 코드

전체 코드

profile
develop life

0개의 댓글