본문 바로가기

프로그래머스

1차 비밀지도 카카오

728x90
static public String[] solution(int n, int[] arr1, int[] arr2) {
    String[] answer = new String[n];
    String[] map1 = new String[n];
    String[] map2 = new String[n];

    for (int i = 0; i < arr1.length; i++) {
        map1[i] = Integer.toBinaryString(arr1[i]);
        map2[i] = Integer.toBinaryString(arr2[i]);

        while(map1[i].length()<n)
        {
            map1[i] = "0" +map1[i];
        }

        while(map2[i].length()<n)
        {
            map2[i] = "0" +map2[i];
        }

        String str = "";
        for (int j = 0; j < map1.length; j++) {
            if (map1[i].charAt(j) == '1' || map2[i].charAt(j) == '1') {
                str += "#";
            } else {
                str += " ";
            }
        }
        answer[i] = str;
    }
    return answer;
}

고찰 : str을 넣는 과정에서 자꾸 out of range가 나와서, 다른소스코드를 분석해보았더니 원본데이터를 변환하는 길이가 전체길이보다 작다면 0을 채워주는 과정을 했다. 이부분은 적용시켰고 결국 통과했다. 아직 문자열에 익숙하지 않아서 그런것 같다.

 

베스트 코드(프로그래머스 출처)


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;
    }
}

변환할때 or로 한방에 교환하는 방법에 놀랐고, 나처럼 비교없이 replaceAll 하는방법이 깔끔하니 좋았다.

728x90

'프로그래머스' 카테고리의 다른 글

x만큼 간격이 있는 n개의 숫자  (0) 2022.12.19
핸드폰번호가리기  (0) 2022.12.19
문자열 내마음대로 정렬하기  (0) 2022.12.11
평행  (0) 2022.12.11
안전지대  (0) 2022.12.08