내일배움캠프

230728 프로그래머스 1차 비밀지도 자바스크립트 비트연산자만 사용 한 풀이

Neda 2023. 7. 28. 20:18

230728 프로그래머스 1차 비밀지도 자바스크립트 비트연산자만 사용 한 풀이

 

문제 설명

비밀지도
네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.

 

프로그래머스

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

programmers.co.kr

 

문제 풀이

  1. for문을 통해 두 배열에서 값을 가져온다
  2. Bit OR 연산자 (|) 을 통해 가져온 두 값을 겹친다 (rowNum).
  3. Bit AND 연산자 (&) 를 통해  겹친 값의 최하위 비트 값을 구한다 (rowNum & 1)
  4. rowStr 값이 1이면 벽이므로 ''#'을, 0이면 벽이 아니므로 ' '을 추가한다
  5. 다음 자릿수를 확인하기 위해  비트 오른쪽 이동 연산자(>>)를 사용해 비트를 한자리 내린다 (rowNum >> 1)
  6. rowNum가 0 이 될 때까지 반복하고, 나머지 칸은 공백으로 채운 후 answer 배열에 추가한다.
function solution(n, arr1, arr2) {
    const answer = []
    for(let i = 0; i< n; i++) {
        let rowNum = arr1[i] | arr2[i]
        let rowStr = ''
        do {
            rowStr = (rowNum & 1 ? '#' : ' ') + rowStr
            rowNum = rowNum >> 1
        } while(rowNum > 0)
        answer.push(" ".repeat(n - rowStr.length) + rowStr)     
    }
    return answer;
}

 

 

2진수 관련 문제는 비트를 활용할 수 있으면 최대한 활용하는 것이 좋은 것 같다. 나누기(/)나 나머지(%) 연산자를 사용하지 않아도 되고, 자리를 이동시키기 쉽다

 


 

Bitwise AND (&) - JavaScript | MDN

The bitwise AND (&) operator returns a number or BigInt whose binary representation has a 1 in each bit position for which the corresponding bits of both operands are 1.

developer.mozilla.org

 

 

Bitwise OR (|) - JavaScript | MDN

The bitwise OR (|) operator returns a number or BigInt whose binary representation has a 1 in each bit position for which the corresponding bits of either or both operands are 1.

developer.mozilla.org

 

 

Right shift (>>) - JavaScript | MDN

The right shift (>>) operator returns a number or BigInt whose binary representation is the first operand shifted by the specified number of bits to the right. Excess bits shifted off to the right are discarded, and copies of the leftmost bit are shifted i

developer.mozilla.org