프로그래머스
map1
, map2
)에 저장한다.'#'
또는 ' '
로 이루어진 문자열을 요소로 갖는 새로운 배열(answer
)을 만든다.'#'
' '
answer
을 리턴한다.function solution(n, arr1, arr2){
//2진법으로 해독하는 함수
const binary = (n, arr) => {
const res = [];
for(let i=0; i<n; i++){
let val = arr[i].toString(2);
if(val.length !== n){
val = '0'.repeat(n-val.length) + val;
}
res.push(val);
}
return res;
}
const map1 = binary(n, arr1);
const map2 = binary(n, arr2);
const answer = [];
for(let i=0; i<n; i++){
let code = '';
for(let j=0; j<n; j++){
if(map1[i][j] === '1' || map2[i][j]=== '1'){
code += "#";
}else{
code += " ";
}
}
answer.push(code);
}
return answer;
}
var solution=(n,a,b) => a.map((a,i) => (a|b[i]).toString(2).padStart(n,0).replace(/0/g,' ').replace(/1/g,'#'))
새롭게 배운 내용
padStart
String.prototype.padStart(목표문자열길이 [, 채워넣을 문자열])
문자열의 시작점부터 문자열을 채워넣어 목표한 문자열의 길이로 만들어 리턴한다. 채워넣을 문자열이 없다면, 기본값은 ""이다.const str = 'hello'; str.padStart(10); // " hello"
Bitwise OR(|)
💫피연산자는 32비트 정수로 변환되고 일련의 비트(0 또는 1)로 표시된다. 32비트를 초과하는 숫자는 최상위 비트를 버린다.
//Before: 11100110111110100000000000000110000000000001 //After: 10100000000000000110000000000001
두 개의 숫자를 입력받았을때 각 숫자를 32비트 정수로 전환한 후, 두 숫자의 각 비트가 페어를 이루어, 두 값 중 하나라도 0이라면
1
을 리턴한다. 둘 다 0인 경우에만0
을 리턴한다./*다음 예시에서 마지막 4자리를 볼때, 1과 0일땐 1을 리턴해 마지막 자리가 모두 1로 변경되었음을 알 수 있다. */ // 9 00000000000000000000000000001001 // 14 00000000000000000000000000001110 14 | 9; // 15 00000000000000000000000000001111
add
함수를 만들어 문자열을 n만큼의 길이로 만들고, 삼항연산자를 사용해 각 문자열의 i번째 값을 확인해 '#'과 ' '를 리턴한다. function solution(n, arr1, arr2){
var answer = [];
var map1 = arr1.map((v) => (v.toString(2)));
var map2 = arr2.map((v) => (v.toString(2)));
for(var i=0; i<n; i++){
var num = add(map1[i], map2[i], n);
answer.push(num);
}
return answer;
}
function add(str1, str2, len){
var val1 = "0".repeat(len-str1.length) + str1;
var val2 = "0".repeat(len-str2.length) + str2;
var res = "";
for(var i=0; i<len; i++){
res += (val1[i]==="1" || val2[i]==="1") ? "#" : " "
}
return res;
}
다른 분의 풀이를 보며 공부가 많이 됐다. Bitwise OR 연산자를 알고나니, 문제에서 지도 1 또는 지도 2 중 어느 하나라도 벽(1)인 부분은 전체 지도에서도 벽(1)이다. 지도 1과 지도 2에서 모두 공백(0)인 부분은 전체 지도에서도 공백(0)이다.
라는 부분이 Bitwise OR 연산자를 풀어서 설명한 것이라는 걸 알게됐다.
그리고, 그동안은 반복할때, repeat
메소드만 사용했는데, padStart라는 새로운 메소드도 알게되었다.
정해진 시간안에 문제를 풀다보니 해결자체에만 집중하게 되는데, 다른 분들의 풀이를 보면서 문제 해결 뿐만 아니라 어떻게 '잘' 해결할 수 있는지도 놓치지 말아야겠다는 생각이 든다.
reference