처음에 이 문제를 아래와 같이 풀었다...
function solution(n, arr1, arr2) {
function makeN(str, n){
if(str.length === n){
return str
} else {
str = 0 + str;
return makeN(str, n)
}
}
function wallAndSpace(str){
let result = ''
for(let i = 0; i < str.length; i++){
if(str[i] === '0'){
result = result + ' '
} else if (str[i] === '1'){
result = result + '#'
}
}
return result;
}
let secretMap = []
for(let i = 0; i < arr1.length; i++){
let secretRow = ""
let map1 = makeN(arr1[i].toString(2), n).split('')
let map2 = makeN(arr2[i].toString(2), n).split('')
for(let j = 0; j < map1.length; j++){
secretRow = secretRow + (+map1[j] || +map2[j])
}
secretMap.push(secretRow)
}
return secretMap.map(n => wallAndSpace(n))
}
코딩을 시작한 내 입장에서 스스로 함수를 만들어서 쓴 것과 toString(n)을 통해 n진법을 구현한 것만으로도 뿌듯했으나... 이번에도 역시 다른 사람의 풀이를 보고 있으니, 현타가 씨게 온다...
function solution(n, arr1, arr2) {
return arr1.map((v, i) => (v|arr2[i]).toString(2).padStart(n, 0).replace(/0|1/g, a => +a ? '#' : ' '))
}
이런저런 메소드를 사용하니 위와 같이 한 줄로 풀 수 있는 것이었다...
문제에 활용될 수 있는 메소드를 간략하게 복붙하며 눈물로 포스팅을 마친다...
'abc'.repeat(1); // 'abc'
'abc'.repeat(2); // 'abcabc'
const str1 = '5';
console.log(str1.padStart(2, '0'));
// expected output: "05"
알고 있었지만 활용방법을 몰라 이용하지 못했었는데, 이번에 다른 사람들의 풀이를 보며 확실히 알게 되었다.
이진수로 바꿔주고 연산을 써야하는 줄 알았는데, 10진수 인 상태로 사용해주면, 알아서 이진수 비트연산을 하고 다시 결과를 십진수로 변환해서 출력해주는 것이었다...
const p = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';
const regex = /Dog/i;
console.log(p.replace(regex, 'ferret'));
// expected output: "The quick brown fox jumps over the lazy ferret. If the dog reacted, was it really lazy?"