https://school.programmers.co.kr/learn/courses/30/lessons/17681?language=javascript
function returnBinary(number, numlength) {
let str = "";
// 이진법 (거꾸로) 구하기
while (true) {
str += (number % 2) + "";
if (number >= 2) {
number = Math.floor(number / 2);
} else {
break;
}
}
console.log('str', str);
// 빈자리에 0 채워넣기
for (let i = str.length; i < numlength; i++) {
str += "0"
}
// 거꾸로 돌리기
let result = "";
for (let i = str.length - 1; i >= 0; i--) {
result += str[i];
}
return result;
}
function solution(n, arr1, arr2) {
for (let i = 0; i < n; i++) {
arr1[i] = returnBinary(arr1[i], n);
arr2[i] = returnBinary(arr2[i], n);
}
combinedArr = [];
for (let i = 0; i < n; i++) {
let str = "";
for (let j = 0; j < n; j++) {
if(arr1[i][j] === "1" || arr2[i][j] === "1"){
str += "#";
} else {
str += " ";
}
}
combinedArr[i] = str;
}
return combinedArr;
}
// n진법으로 바꾸기
function toRadix(n, radix) {
let result = "";
while (n > 0) {
result = (n % radix) + result;
n = Math.floor(n / radix);
}
return result;
}
// 암호숫자로 바꾸기
function toCipher(arr, numlength) {
for (let i = 0; i < arr.length; i++) {
arr[i] = toRadix(arr[i], 2);
arr[i] = arr[i].padStart(numlength, "0");
}
return arr;
}
// 지도 만들기
function createMap(arr1, arr2){
const result = [];
for (let i = 0; i < arr1.length; i++) {
let str = "";
for (let j = 0; j < arr1[i].length; j++) {
if (arr1[i][j] === "1" || arr2[i][j] === "1") {
str += "#";
} else {
str += " ";
}
}
result[i] = str;
}
return result;
}
function solution(n, arr1, arr2) {
const cipher1 = toCipher(arr1, n);
const cipher2 = toCipher(arr2, n);
return createMap(cipher1, cipher2);
}
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/some
function createMap(arr1, arr2) {
const result = [];
for (let i = 0; i < arr1.length; i++) {
let str = "";
for (let j = 0; j < arr1[i].length; j++) {
const compare = [arr1[i][j], arr2[i][j]];
if (compare.some((x) => x === "1")) {
str += "#";
} else {
str += " ";
}
}
result[i] = str;
}
return result;
}
function createMap(arr1, arr2) {
const result = [];
for (let i = 0; i < arr1.length; i++) {
let str = "";
for (let j = 0; j < arr1[i].length; j++) {
const compare = arr1[i][j] | arr2[i][j];
const mark = compare ? "#" : " ";
str += mark;
}
result[i] = str;
}
return result;
}
사실! 10진수 숫자를 비트연산자로 비교해도 알아서 2진수로 바꿔서 각 자리마다 연산해준다.
내가 한 방법 :
1. 9와 30을 각각 2진수 문자열로 바꾼다. '1001', '11110'
2. '0'을 추가해서 자리수를 맞춰줌. '01001', '11110'
3. 각 자리수마다 비교하여 새 문자열 생성. '11111'
비트연산자를 활용한 간단한 방법:
1. (9 | 30) // 31
2. 2진수로 바꿔줌 // '11111'
다음에 비슷한 문제가 나오면 활용해보자.