공부/프로그래머스
Lv1)JS-[1차]비밀지도
조용한외침
2022. 1. 13. 14:38
느낀점
해당문제를 풀면서 기존에 풀었던 메서드가 생각에 남아있어서 어느정도 문제를 풀때 실마리가 되었다.
toString(num)을 사용하면 x 진법을 사용할 수 있다. 이를 기반으로 입력받은 배열을 2진법으로 변환후 split으로 숫자를 나눠 주었다. 그리고 반복문을 통해서 '#'과 ' '으로 변화를 줄 수 있도록 하였다.
내가 푼 방법
function solution(n, arr1, arr2) {
let answer = [];
let modifiedArr1 = arr1.map((el) => el.toString(2).split(''));
let modifiedArr2 = arr2.map((el) => el.toString(2).split(''));
for (let i = 0; i < n; i++) {
answer.push([]);
if (modifiedArr2[i].length !== n) {
for (let j = modifiedArr2[i].length; j < n; j++) {
modifiedArr2[i].unshift('0');
}
}
if (modifiedArr1[i].length !== n) {
for (let j = modifiedArr1[i].length; j < n; j++) {
modifiedArr1[i].unshift('0');
}
}
for (let j = 0; j < n; j++) {
if (modifiedArr2[i][j] === '1' && modifiedArr1[i][j] === '1') {
answer[i].push('#');
} else if (modifiedArr2[i][j] === '0' && modifiedArr1[i][j] === '0') {
answer[i].push(' ');
} else {
answer[i].push('#');
}
}
answer[i] = String(answer[i].join(''));
}
return answer
}
다른 방법
function solution(n, arr1, arr2) {
let num1, num2, s;
let answer = [];
//manually turning decimals to binaries cos i can!
for (let i=0; i<n; i++){
num1 = arr1[i];
num2 = arr2[i];
s = '';
for (let j=0; j<n; j++){
s = (num1%2 + num2%2) ? '#'+s : ' '+s;
num1 = Math.floor(num1/2);
num2 = Math.floor(num2/2);
}
answer.push(s);
}
return answer;
}