알고리즘
[Programmers][1차] 비밀지도(난이도:★★★★★★)
BaekGyuHyeon
2022. 5. 17. 09:11
https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
return solutionA(n,arr1,arr2);
}
public String[] solutionA(int n, int[] arr1, int[] arr2){
int num = getMulti(n);
String[] answer = new String[n];
for(int i = 0 ; i < n; i++){
char[] a1 = toBinaryMap(n,num,arr1[i]).toCharArray();
char[] a2 = toBinaryMap(n,num,arr2[i]).toCharArray();
String ans = "";
// ascii코드 35(#) 을 비교해서 둘중 하나라도 #이면 #을 붙이고 아니면 ' '을 붙인다.
for(int j = 0; j < a1.length; j++){
if(a1[j] == 35 || a2[j] == 35)
ans += '#';
else
ans += ' ';
}
answer[i] = ans;
}
return answer;
}
// 2진수 변환
// 변환 값이 0이면 빈칸을, 1이면 #을 붙여 변환된 형태로 반환한다.
public String toBinaryMap(int n,int size,int num){
String ans = "";
int sub = size;
for(int i = 0; i < n; i ++){
int tmp = num / sub;
ans = ans + (tmp == 0?" ":"#");
num %= sub;
sub /= 2;
}
return ans;
}
public int getMulti(int n){
int res = 1;
for(int i = 0; i < n-1; i ++)
res *= 2;
return res;
}
}