| 제출
function solution(n, arr1, arr2) {
let newArr = [];
for (let i = 0; i < n; i++) {
newArr.push((arr1[i] | arr2[i]).toString(2));
}
return newArr.map((item) =>
item
.padStart(n, 0)
.split("")
.map((num) => (num === "1" ? "#" : " "))
.join("")
);
}
| 풀이과정
비트 OR 연산자( | )는 대응되는 비트 중에서 하나라도 1이면 1을 반환한다.
현재 두 그림을 더했을 때 벽인 부분은 전체 지도에서도 벽이되고, 모두 공백인 부분만 전체 지도에서 공백이다.
벽은 1, 공백은 0으로 표현되기 때문에 주어진 두 배열을 비트 OR 연산을 해주어야 한다.
이진수 값을 가지고 #과 공백으로 표현해서 출력해야하기 때문에 비트 OR 연산을 해준 값을 이진수로 변환하여 저장한다.
예시에서 9의 경우 이진수로 표현하게 되면 1001이 된다. 하지만, 한 변 크기가 5이기 떄문에 01001로 만들어주기 위해서 padStart를 사용한다.
padStart로 주어진 n의 길이에 맞게 0을 채워주면 1001이 01001이 되고, 각 이진수에 맞게 변환이 필요하기 때문에 map 메서드를 써주기 위해서 split("")을 사용했다.
#과 공백으로 변환해준 뒤, join("")으로 다시 합쳐주면 완료!
| 개념
Number.prototype.toString([radix])
console.log((6).toString(2)); // '110'
console.log((254).toString(16)); // 'fe'
- 2와 36사이의 정수 radix를 지정하면 해당 진수에 맞게 Number 객체를 문자열로 반환한다.
String.prototype.padStart()
- 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환한다.
str.padStart(targetLength [, padString])
- 매개변수
- targetLength - 목표 문자열 길이
- padString - 현재 문자열에 채워넣을 다른 문자열
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 폰켓몬 - level 1 (javascript) (0) | 2022.10.28 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 - level1 (javascript) (0) | 2022.10.28 |
[프로그래머스] 최소직사각형 - level 1 (javascript) (1) | 2022.09.19 |
[프로그래머스] 내적 - level 1 (javascript) (0) | 2022.09.19 |
[프로그래머스] 없는 숫자 더하기 - level 1 (javascript) (0) | 2022.09.19 |