프로그래머, 비밀 카드 운동(JavaScript)

문제 설명

비밀지도

Neo는 Frodo가 보통 비상 자금을 어디에 숨기는지 알려주는 비밀 지도를 받았습니다. 하지만 이 비밀 지도는 숫자로 암호화되어 있기 때문에 위치를 파악하기 위해서는 복호화를 거쳐야 합니다. 운 좋게도 카드 코드를 해독하는 방법에 대한 지침이 담긴 메모도 찾았습니다.

  1. 카드 한 면의 길이는 n-제곱 배열의 형태로 각 셀은 “방”(” “) 또는 “벽”(“#”)의 두 가지 유형으로 구성됩니다.
  2. 전체 지도는 ​​두 개의 지도를 겹쳐서 얻을 수 있습니다. 각각 “카드 1″과 “카드 2″라고 부르겠습니다. 맵 1 또는 맵 2에서 벽인 부분은 전체 맵에서도 벽입니다. 지도 1과 지도 2 모두에서 비어 있는 영역은 전체 지도에서도 비어 있습니다.
  3. 맵 1과 맵 2는 각각 정수 배열로 인코딩됩니다.
  4. 뒤섞인 배열은 지도의 각 수평선에서 벽 부분을 식별합니다. 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;
}