hoon's bLog

[Java] 프로그래머스 비밀지도 자바 본문

코딩테스트/프로그래머스

[Java] 프로그래머스 비밀지도 자바

개발한기발자 2022. 6. 22. 11:24
반응형

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/17681

 

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

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

programmers.co.kr


[나의 풀이]

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        //십진수 -> 이진수
        for (int i=0; i<n; i++) {
            answer[i] = String.format("%0"+n+"d",Long.parseLong(Integer.toBinaryString(arr1[i] | arr2[i])));
            answer[i] = answer[i].replace("0", " ");
            answer[i] = answer[i].replace("1", "#");
        }
        return answer;
    }
}

[다른 사람의 풀이]

class Solution {
    public String makeSharp(int n, int m) {
        if(n == 0) {
            if( m > 0) {
                String str = "";
                for(int i = 0; i < m; i++) {
                    str += " ";
                }
                return str;
            } else return "";
        } else {
            return n % 2 == 0 ? makeSharp(n/2, m-1) + " " : makeSharp(n/2, m-1) + "#"; 
        }
    }
    public String[] solution(int n, int [] arr1, int [] arr2) {
        String [] answer = new String[n];
        int [] secretMap = new int[n];
        for(int i = 0; i < n; i++) {
            secretMap[i] = arr1[i] | arr2[i];
            answer[i] = makeSharp(secretMap[i], n);
        }
        return answer;
    }
}

[정리]

- String.format("%0"+n+"d", 표현할 데이터 타입) : 표현할 데이터 타입을 n자릿수로 표현

- Integer.toBinaryString으로 2진수로 변환

- | 연산 : 두 수의 OR연산

- 재귀 함수를 통해 2진수 변환 없이, 2로 나누어 떨어지는 경우 바로 공백으로 치환하며, 배열에 비밀지도를 한 번에 그리며 출력...

 

개인피셜 난이도 : ★☆☆

평상시에 잘 쓰지 않는 함수들이 있어,

데이터 값 처리하는 부분이 원활하지 않았다.

재귀 함수는.... 정말 계속 접해보는 수밖에 없는 것 같다...

남의 코드를 보면 이해가 되지만,

정작 내가 코딩하지 못하는 현실...

 

계속해서 코드를 들여다보고,

리뷰하며 익숙하게 만드는 수 밖에.

 

끝.

728x90
반응형