본문 바로가기
Algorithm/프로그래머스

[프로그래머스][2018 KAKAO BLIND RECRUITMENT] [1차] 비밀지도 (level 1)

by HBGB 2019. 12. 6.

https://programmers.co.kr/learn/courses/30/lessons/17681

 

코딩테스트 연습 - [1차] 비밀지도 | 프로그래머스

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 공백(" ) 또는벽(#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 지도 1과 지도 2라고 하자. 지도 1

programmers.co.kr

 

방법 1 : 패딩과 문자열 치환을 알고리즘으로

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        
        String[] answer = new String[n];
        StringBuilder sb = null;
        
        for (int i = 0; i < answer.length; i++) {
 
            // or 비트연산
            String strBinary = Integer.toBinaryString(arr1[i] | arr2[i]);
            sb = new StringBuilder();
            
            // 0으로 왼쪽패딩
            while(strBinary.length() < n) {
                strBinary = "0" + strBinary;
            }
            
            // 결과 문자열 만들기
            for (int j = 0; j < strBinary.length(); j++) {
                if (strBinary.charAt(j) == '1') {
                    sb.append('#');
                } else {
                    sb.append(' ');
                }
            }
            answer[i] = sb.toString();
        }
        return answer;
    }
}
Colored by Color Scripter

 

방법 2 : 패딩과 문자열 치환을 자바제공 메소드로

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
 
        String[] answer = new String[n];
 
        for (int i = 0; i < answer.length; i++) {
 
            // or 비트연산
            String strBinary = Integer.toBinaryString(arr1[i] | arr2[i]);
 
            // 공백 왼쪽패딩
            strBinary = String.format("%" + n + "s", strBinary);
 
            // 문자열 치환
            strBinary = strBinary.replaceAll("1""#");
            strBinary = strBinary.replaceAll("0"" ");
 
            answer[i] = strBinary;
        }
        return answer;
    }
}
Colored by Color Scripter

 

방법 1이 방법2보다 좀더 빠르다

보기에는 2번이 깔끔하긴 하지만,

저런게 있는지 굳이 찾아보지 않아도 될 것 같다.

 

댓글