[1차] 비밀지도

문제


문제 풀이

배열 1과 배열2에 있는 값을 기준으로 2진법으로 변경하고 0과 1 기준으로 # 과 공백을 하나의 출력 배열에 담는 문제이다. 

 

여기서 물어보는 것은 2진법 변환 방법과 자릿수 n을 충족하지 못할 때 0을 어떻게 채울 것이냐를 물어보는 것인데 해당 부분은 Integer 클래스를 사용하여 2진법으로 변환하고 자릿수는 함수를 만들어서 처리를 하였다. 

 

String.format 형식을 사용하고 싶었으나 매개변수로 받는 값으로 입력하는 방식을 어떻게 처리 할지 몰라 일단 함수로 처리 하였다. 


나의 답안

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

    for (int i = 0; i < arr1.length; i++) {
        String map = "";
        String format1 = checkLen(Integer.toString(arr1[i], 2),n);
        String format2 = checkLen(Integer.toString(arr2[i], 2),n);

        for (int j = 0; j < format1.length(); j++) {
            if (format1.charAt(j) == '1' || format2.charAt(j) == '1') {
                map += "#";
            } else {
                map += " ";
            }
        }
        answer[i] = map;
    }

    return answer;
}
public static String checkLen(String s, int n) {
    int gap = n - s.length();
    String newString = "";
    if (gap == 0) return s;

    for (int i = 0; i < gap; i++) {
        newString += "0";
    }

    return newString + s;
}

다른 답안

String.format을 아래 코드와 같이 사용하면 된다는 듯이 올라와 있다. 다음에 저렇게 활용해보고자 한다. 

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

'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글

숫자 문자열과 영단어  (0) 2023.03.18
문자열 내 마음대로 정렬하기  (0) 2023.03.18
최소직사각형  (0) 2023.03.17
시저 암호  (0) 2023.03.17
예산  (0) 2023.03.16