[JavaScript] [1차] 비밀지도

ksweeni·2023년 4월 29일

Programmers

목록 보기
2/20

[1차] 비밀지도

2018 KAKAO BLIND RECRUITMENT

🎱 problem

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

🎱 solution

function solution(n, arr1, arr2) {
    //지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 
    //지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
    var temp = [];
    var answer = [];
   
    for(let i=0;i<arr1.length;i++){
        const v2 = (arr1[i] | arr2[i]).toString(2).padStart(n,"0");
        temp.push(v2);
    }
   
    for(let i=0;i<n;i++){
        let ans = '';
        for(let j=0;j<n;j++){
            if(temp[i][j] ==='0') ans = ans + ' ';
            else ans = ans + '#';
        }
        answer.push(ans);
    }
    return answer;
}

" #### "로 반환되어야 하는 것이 맨 앞 부분 공백 제거로 "#### "처럼 출력되어 초반에 틀렸던 문제이다. padStart() 메서드를 통해 해결할 수 있었다.

💿 padStart()

현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환한다. 채워넣기는 대상 문자열의 시작(좌측)부터 적용된다.
즉, 문자열의 첫 공백을 반영하여 반환하기 위한 메소드이다.

🎲 genius solution !

function solution(n, arr1, arr2) {
  let result = arr1.map((a, i) =>
    (a | arr2[i])	// 비밀지도는 arr1[i] or arr2[i]
      .toString(2)	// 10진수는 2진수로
      .padStart(n, 0)	// 맨 앞 0 제거되지 않도록
      .replace(/0/g, " ")	// 0은 공백으로
      .replace(/1/g, "#")	// 1은 #으로
  );
  return result;

0개의 댓글