[JavaScript][Programmers] 비밀지도

조준형·2021년 9월 2일
0

Algorithm

목록 보기
120/142
post-thumbnail

🔎 비밀지도

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/17681

📄 제출 코드

function solution(n, arr1, arr2) {
  arr1 = changeMap(arr1,n);
  arr2 = changeMap(arr2, n);
  let tmap = makeMap(n);
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      if (arr1[i][j] == '1' || arr2[i][j] == '1') tmap[i][j] = '#';
    }
  }
  let answer = tmap.map(el => { return el.join('').replace(/0/gi, ' ')});
  return answer;
}
function makeMap(n) {
  let tmp = [];
  for (let i = 0; i < n; i++) {
    tmp[i] = [];
    for (let j = 0; j < n; j++) {
     tmp[i][j] = 0
    }
  }
  return tmp;
}
function changeMap(arr,n) {
  let tmp = arr.map((el) => {
    let ch = el.toString(2).split('')
    if (ch.length < n) {
      for (let i = ch.length; i < n; i++) {
        ch.unshift('0')
      }
    }
    return ch;
  });
  return tmp;
}
let n = 5;
let arr1 = [9, 20, 28, 18, 11];
let arr2 = [30, 1, 21, 17, 28];
console.log(solution(n, arr1, arr2));

바로 뭐 떠오른 방법은 없어서 하나씩 완성해가봤다.
우선 changeMap()을 통해 arr1, arr2안에 있는 숫자를 2진수로 바꾼다.
이때 2진수의 길이가 n보다 작으면 길이가 n이 될때까지 앞에 0을 넣어준다.

그 다음 두 맵의 상태에 따라 저장해둘 tmap을 만들고, arr1과 arr2가 1이면 벽이니까 tmap에 #을 설정한다.
설정이 완료되면 위 테스트케이스 경우 아래처럼 나올 것이다.

[
  [ '#', '#', '#', '#', '#' ],
  [ '#', 0, '#', 0, '#' ],
  [ '#', '#', '#', 0, '#' ],
  [ '#', 0, 0, '#', '#' ],
  [ '#', '#', '#', '#', '#' ]
]

정답의 형태처럼만들기 위해 map을 이용해 새로운 배열을 만들어 답을 도출한다.
각요소를 하나의 문자열로 만들기 위해 join을 사용하고,
0부분을 공백으로 고치기위해 replace를 사용한다.
그러면 정답이 나오게된다.

profile
깃허브 : github.com/JuneHyung

0개의 댓글