Lv.1 : 비밀지도 [JavaScript]

2024. 8. 29. 00:18Algorithm/프로그래머스

반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


문제 풀이

function solution(n, arr1, arr2) {
    var answer = [];    

    const A = arr1.map((num) => num.toString(2));
    const B = arr2.map((num) => num.toString(2));

    for(var i=0; i<n; i++){
        answer.push((+A[i] + +B[i]).toString().padStart(n, 0));
    }
    
    answer = answer.map((e)=> e.split('').map((s)=> s == 0 ? ' ' : '#').join(''));
    
    return answer;
}

arr1과 arr2를 2진수로 변환한 배열 A와 B를 만든다

둘을 더한 후 지도의 크기에 맞게 padStart를 통해 앞자리에 0을 채워준다

=> [ '12111', '10101', '21201', '20011', '12111' ]

0이면 지도에서 공백인 부분이고, 0이 아니면 벽('#')인 부분이다

map을 통해 0인 경우와 아닌 경우에 따라 문자를 바꿔주고 answer를 리턴

 

추가

후에 풀이를 보면 알 수 있는데 이 문제는 OR(|) 연산을 사용하게 만들어진 문제이다

OR 연산(|)은 대응되는 비트 중에서 하나라도 1이면 1을 반환한다

즉, 지도를 겹쳐서 두 지도중 어느 하나라도 벽인 부분이 전체 지도에서도 벽이라는 문제의 조건과 일치하게 된다

function solution(n, arr1, arr2) {
    var answer = [];    

    for(var i=0; i<n; i++){
        answer.push((arr1[i] | arr2[i]).toString(2).padStart(n, 0));
    }
    
    answer = answer.map((e)=> e.split('').map((s)=> s == 0 ? ' ' : '#').join(''));
    
    return answer;
}

arr1[i]와 arr[2]의 or연산 후 2진수로 변환해 맵 크기 맞춰준 후

나머지 풀이는 위와 동일

 

 

반응형