230728 프로그래머스 1차 비밀지도 자바스크립트 비트연산자만 사용 한 풀이
문제 설명
비밀지도
네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.
문제 풀이
- for문을 통해 두 배열에서 값을 가져온다
- Bit OR 연산자 (|) 을 통해 가져온 두 값을 겹친다 (rowNum).
- Bit AND 연산자 (&) 를 통해 겹친 값의 최하위 비트 값을 구한다 (rowNum & 1)
- rowStr 값이 1이면 벽이므로 ''#'을, 0이면 벽이 아니므로 ' '을 추가한다
- 다음 자릿수를 확인하기 위해 비트 오른쪽 이동 연산자(>>)를 사용해 비트를 한자리 내린다 (rowNum >> 1)
- 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진수 관련 문제는 비트를 활용할 수 있으면 최대한 활용하는 것이 좋은 것 같다. 나누기(/)나 나머지(%) 연산자를 사용하지 않아도 되고, 자리를 이동시키기 쉽다
'내일배움캠프' 카테고리의 다른 글
230731 알고리즘 4-합계 자바스크립트 문제풀이 (0) | 2023.07.31 |
---|---|
230730 내일배움캠프 11주차 WIL (0) | 2023.07.30 |
230727 타입스크립트 never 타입 (0) | 2023.07.27 |
230726 리액트 이벤트 핸들러에 커링 사용하기 (0) | 2023.07.26 |
230725 프로그래머스 삼총사 문제 풀이 (5) | 2023.07.25 |