네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.
네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.
function toBinary(n, num) {
let remains,
binary = [];
while (num !== 0) {
remains = num % 2;
binary.push(remains);
num = Math.floor(num / 2);
}
binary.reverse();
// 변환된 2진수를 n자리로 만들어줌
// n자리보다 클 경우 앞자리 0 삭제
if (binary.length > n) {
binary.shift();
}
// n자리보다 작을 경우 앞자리에 0 삽입
if (binary.length < n) {
while (binary.length !== n) {
binary.unshift(0);
}
}
return binary;
}
function solution(n, arr1, arr2) {
let answer = [],
converted1 = [],
converted2 = [];
for (let i = 0; i < n; i++) {
let string = '';
converted1 = toBinary(n, arr1[i]);
converted2 = toBinary(n, arr2[i]);
for (let j = 0; j < n; j++) {
if (converted1[j] === 1 || converted2[j] === 1) {
string += '#';
} else {
string += ' ';
}
}
answer.push(string);
}
console.log(answer);
return answer;
}
toBinary()
에서.OR
연산을 위해 shift(), unshift()
를 이용해서 n
자리 숫자로 맞춰주는 작업을 함converted1[j]
또는 converted2[j]
의 원소 중 하나라도 1이 있으면 string
에 #
을 추가해준다. 없으면 빈 공간으로 추가함.answer
에 string
을 푸쉬해준다.num
을 2로 나누는 과정을 반복했는데 이상하게 내 예상과 너무 다른 결과가 계속 나왔다. 2진수 변환 과정 로직을 잘못 생각한줄 알고 멘붕이었는데(ㅋㅋ) 알고보니 자바스크립트는 Math.floor()
를 이용해야 일반적으로 기대하는 그 값이 나오는거였다.. 이런 ㅠㅠ