2017 카카오 신입 공채 1차 코딩 테스트 <비밀 지도> in Java
1. 비밀 지도(난이도: 하)
네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.
- 지도는 한 변의 길이가
n
인 정사각형 배열 형태로, 각 칸은 “공백”(“ “) 또는 “벽”(“#”) 두 종류로 이루어져 있다. - 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 “지도 1”과 “지도 2”라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
- “지도 1”과 “지도 2”는 각각 정수 배열로 암호화되어 있다.
- 암호화된 배열은 지도의 각 가로줄에서 벽 부분을
1
, 공백 부분을0
으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.
네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.
입력 형식
입력으로 지도의 한 변 크기 n
과 2개의 정수 배열 arr1
, arr2
가 들어온다.
- 1 ≦
n
≦ 16 arr1
,arr2
는 길이n
인 정수 배열로 주어진다.- 정수 배열의 각 원소
x
를 이진수로 변환했을 때의 길이는n
이하이다. 즉, 0 ≦x
≦ 2^n - 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 31 32 33 34 35 36 37 38 39 40 41 42 | public class SecretMap { public static void main(String[] args) { int arr1[] = {46, 33, 33, 22, 31, 50}; int arr2[] = {27, 56, 19, 14, 14, 10}; int n = arr1.length; SecretMap(n, arr1, arr2); } public static String[] SecretMap(int n, int arr1[], int arr2[]) { int result; String[] output = new String[n]; for(int i = 0; i < n; i++){ result = arr1[i] | arr2[i]; String Sresult = Integer.toBinaryString(result); int tmpsize = Sresult.length(); if(tmpsize < n) Sresult = reversepad(n-tmpsize, Sresult); Sresult = Sresult.replace('1', '#'); Sresult = Sresult.replace('0', ' '); output[i] = Sresult; } return output; } public static String reversepad(int n, String str) { String result = new String(); for(int i = 0; i < n; i++){ str += ' '; } for(int i = str.length()-1; i >= 0; i--) { result += str.charAt(i); } return result; } } | cs |
method 'SecretMap'
: 주어진 arr1, arr2 정수 배열의 원소들을 bitwise - OR 해주어 결과값을 구해준다. 이후, 구한 정수값을 Binary String으로 변환해준 후, '1'이 들어간 자리는 '#'으로 '0'이 들어간 자리는 ' '으로 replace 해주어 최종 결과를 구할 수 있다.
method 'reversepad'
: 주어진 정수 n보다 result의 길이가 작을 경우, 그 크기의 차이 만큼 좌측을 공백으로 padding 해주는 기능을 수행한다. 먼저, String에 공백을 추가시켜준 뒤 해당 String을 for문을 통해 reverse 시킴으로써 좌측 padding의 기능을 수행할 수 있다.
'Software Convergence > Algorithm' 카테고리의 다른 글
2017 카카오 신입 공채 1차 코딩 테스트 <캐시> (1) | 2018.07.18 |
---|---|
2017 카카오 신입 공채 1차 코딩 테스트 <다트 게임> (0) | 2018.07.12 |
Stack을 이용한 Queue의 구현 (0) | 2018.07.02 |
정렬 알고리즘(Sorting Algorithm) (0) | 2018.01.17 |
[무식하게 풀기: Brute-Force] (0) | 2018.01.11 |