프로그래머스

[프로그래머스] 프로그래머스 Level1 [1차] 비밀지도 Java (카카오 코딩테스트)

Doshisha 2022. 5. 12. 10:09

문제

https://programmers.co.kr/learn/courses/30/lessons/17681?language=java 

 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr

풀이

문제를 풀기 위한 알고리즘은 따로 필요하지 않고 진법 변환에 대한 메서드나 구현 방법을 알고 있으면 쉽게 풀 수 있을 것이다. 필자는 toBinaryString이라는 메서드를 사용하여 10진수를 2진수로 변환해 줬는데 이때 반환되는 문자열의 크기는 항상 n과 같아야 하지만 toBinaryString 메서드는 수의 따라 3자리, 4자리, 5자리 등 여러 자릿수로 변환되기 때문에 n과의 차이를 구해주어 그만큼 앞에 '0'을 추가해 주었다.

추가까지 완료된 문자열은 10진수가 2진수로 변환되었고, 길이가 n인 문자열 즉, 우리가 찾던 그 문자열이므로 두 문자열의 패턴에 따른 비교를 통해 line이라는 변수에 담아주고 문제를 해결할 수 있었다.

코드

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        System.out.println("dd");

        for(int i = 0; i < n; i++) {

            String temp1 = Integer.toBinaryString(arr1[i]);
            String temp2 = Integer.toBinaryString(arr2[i]);
            String change1 = "";
            String change2 = "";
            String line = "";

            if(temp1.length() < n) {
                int gap = n - temp1.length();
                for(int j = 0; j < gap; j++) {
                    change1 += "0";
                }
                change1 += temp1;
            }
            else {
                change1 = temp1;
            }
            if(temp2.length() < n) {
                int gap = n - temp2.length();
                for(int j = 0; j < gap; j++) {
                    change2 += "0";
                }
                change2 += temp2;
            } else {
                change2 = temp2;
            }


            for(int k = 0; k < n; k++) {
                if(change1.charAt(k) == '0' && change2.charAt(k) == '0') {
                    line += ' ';
                }
                if(change1.charAt(k) == '1' || change2.charAt(k) == '1') {
                    line += '#';
                }
            }

            answer[i] = line;
        }

        return answer;
    }
}