비밀지도

연쇄코딩마·2021년 1월 21일
0
post-thumbnail

설명 : 비밀지도

간단 설명 : 프로도가 비상금을 숨겨놓는 비밀지도를 해석 하기 위해서는 암호를 해석해야 한다.

  • 한변의 길이가 n 인 정사각형 배열형태로 각 칸은 공백(" ") 또는벽("#") 두 종류로 이루어져 있다.
  • 배열이 두개이기 때문에 지도가 두장이 나온다 그걸 두개를 겹쳐 지도를 얻을 수 있다.
  • 예를 들어 두 지도를 겹쳤을때 벽은 벽이며, 공백은 전체 지도에서 공백이다. 암호화된 배열은 벽부분을 1, 공백은 0이다. 이 String은 이진수에 해당하는 값이다.
  • 입출력 예시 :
매개 변수narr1arr2출력
15[9, 20, 28, 18, 11][30, 1, 21, 17, 28]["#####","# # #", "### #", "# ##", "#####"]
26[46, 33, 33 ,22, 31, 50][27 ,56, 19, 14, 14, 10]["######", "### #", "## ##", " #### ", " #####", "### # "]

내 코드 :

function solution(n, arr1, arr2) {
  let temp = [];
  let resultString = "";
  let result = [];
  for (let i = 0; i < arr1.length; i++) {
    temp.push(arr1[i].toString(2));
    temp.push(arr2[i].toString(2));
  }
  for (let i = 0; i < temp.length; i++) {
    if (temp[i].length !== n) {
      for (let j = 0; j < temp[i].length; j++) {
        temp[i] = "0" + temp[i];
        if (temp[i].length === n) {
          break;
        }
      }
    }
  }

  for (let i = 0; i < temp.length; i += 2) {
    for (let j = 0; j < temp[i].length; j++) {
      if (temp[i][j] === temp[i + 1][j]) {
        if (temp[i][j] === "1") {
          resultString += "#";
        } else {
          resultString += " ";
        }
      } else {
        resultString += "#";
      }
    }
    result.push(resultString);
    resultString = "";
  }
  return result;
}

다른 분 코드 :

function solution(n, arr1, arr2) {
    return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' '));
}

const addZero = (n, s) => {
    return '0'.repeat(n - s.length) + s;
}

회고 :

이건 뭐 너무나 극명한 실력차이다. 그래도 점점 나아지고 있으니 더욱 분발하자!

profile
只要功夫深,铁杵磨成针

0개의 댓글