비밀지도

Sheryl Yun·2023년 8월 3일
0

문제 링크

처음 풀이

  • 숫자를 이진법(binary)로 바꾸기: .toString(2)
  • 자릿수(n)에 맞게 앞 자리를 0으로 채우기: .padStart(n, 0)

10진법 숫자를 이진법으로 바꿔준 배열을 만들고,
i문에서 element 빈 배열 생성,
j문에서 두 이진법 배열의 '#' 여부를 판단해서 element 배열을 구성해주고,
j문이 끝나자마자 answer에 element를 join해서 반영해주었다.

이후 다음 i 문을 돌면 let 변수 키워드에 의해 element 배열이 다시 초기화되면서 반복

function solution(n, arr1, arr2) {
    let answer = [];
    
    let binary1 = arr1.map((num) => num.toString(2).padStart(n, 0));
    let binary2 = arr2.map((num) => num.toString(2).padStart(n, 0));
    
    for (let i = 0; i < n; i++) {
        let element = [];
        
        for (let j = 0; j < n; j++) {
            if (binary1[i][j] === '1' || binary2[i][j] === '1') element.push('#');
            else element.push(' ');
        }
        
        answer.push(element.join(''));
    }
    
    return answer;
}

새로운 풀이

j문 안의 binary 배열 요소가 '1'인지 확인하는 부분을 정규식(replace)을 이용해서 간단하게 해결할 수 있었다.

또 arr1 또는 arr2 두 가지의 경우에 동일한 로직을 돌릴 경우 '|' 연산자를 사용하면 for-i문, for-j문을 돌릴 필요가 없었다.

function solution(n, arr1, arr2) {
    let answer = [];
    
    for (let i = 0; i < n; i++) {
        answer.push(
            (arr1[i] | arr2[i])
            .toString(2)
            .padStart(n, 0)
            .replace(/1/g, '#')
            .replace(/0/g, ' ')
        );
    }
    
    return answer;
}
profile
영어강사, 프론트엔드 개발자를 거쳐 데이터 분석가를 준비하고 있습니다 ─ 데이터분석 블로그: https://cherylog.tistory.com/

0개의 댓글