문제 설명
비밀지도
Neo는 Frodo가 보통 비상 자금을 어디에 숨기는지 알려주는 비밀 지도를 받았습니다. 하지만 이 비밀 지도는 숫자로 암호화되어 있기 때문에 위치를 파악하기 위해서는 복호화를 거쳐야 합니다. 운 좋게도 카드 코드를 해독하는 방법에 대한 지침이 담긴 메모도 찾았습니다.
- 카드 한 면의 길이는 n-제곱 배열의 형태로 각 셀은 “방”(” “) 또는 “벽”(“#”)의 두 가지 유형으로 구성됩니다.
- 전체 지도는 두 개의 지도를 겹쳐서 얻을 수 있습니다. 각각 “카드 1″과 “카드 2″라고 부르겠습니다. 맵 1 또는 맵 2에서 벽인 부분은 전체 맵에서도 벽입니다. 지도 1과 지도 2 모두에서 비어 있는 영역은 전체 지도에서도 비어 있습니다.
- 맵 1과 맵 2는 각각 정수 배열로 인코딩됩니다.
- 뒤섞인 배열은 지도의 각 수평선에서 벽 부분을 식별합니다. 1, 빈 부분 0으로 인코딩했을 때 얻은 이진수에 해당하는 값의 배열입니다.
Neo가 Frodo의 비상 자금을 얻을 수 있도록 비밀 지도를 해독하는 데 도움이 되는 프로그램을 작성하십시오.
설명
해야 할 일을 순서대로 하십시오.
1. 주어진 배열을 이진수로 변환한 후 크기 n의 배열을 만들고 이진수 값을 문자열 형태로 삽입한다. (지도 생성)
– map1 및 map2 생성
– 여기서 주의할 점은 바이너리로 변환한 값이 다음과 같이 n의 길이보다 작은 경우 B. 10 또는 100, 0이 앞에 붙습니다.
– addZero라는 별도의 기능 구현.
2. 계산합니다.
– 배열을 만들고 map1과 map2의 각 요소의 값을 추가합니다.
– 추가된 값이 0이면 공백을 삽입하고, 0이 아니면 ‘#’ 문자를 삽입합니다.
3. 답변 반환
function solution(n, arr1, arr2) {
var answer = ();
var map1 = ();
var map2 = ();
//지도 생성
for(let i =0; i < arr1.length; i++){
map1.push(arr1(i).toString(2));
map1(i).length < n ? map1(i) = addZero(map1(i), n) : ''
map2.push(arr2(i).toString(2));
map2(i).length < n ? map2(i) = addZero(map2(i), n) : ''
}
//연산
const mapAnsTemp = ();
for(let i =0; i < map1.length; i++){
var temp = '';
for(let j = 0; j < map1(i).length; j++){
Number(map1(i)(j)) + Number(map2(i)(j)) === 0 ? temp += ' ' : temp += '#'
}
mapAnsTemp.push(temp);
}
return mapAnsTemp;
}
function addZero(str, n){
var ans=""
if(str.length < n){
while(str.length !== n){
str="0" + str;
}
ans = str;
}
return ans;
}