Programmers Level.1 Question Review 🧩
문제출처: https://programmers.co.kr/learn/courses/30/lessons/17681
function solution(n, arr1, arr2) {
//이진수 변환 + 모자란 숫자자리만큼 앞에 '0' 붙이기 + 한 글자 단위로 쪼개기
let newArr1 = arr1.map(v => (v.toString(2).padStart(n, 0).split('')));
let newArr2 = arr2.map(v => (v.toString(2).padStart(n, 0).split('')));
//이중배열을 순회하면서 1과 0 중 하나라도 1이 있다면 1 반환
//#은 1로, 0은 공백으로 치환 + 배열의 글자 합쳐서 하나의 문자열로 반환
return newArr1.map((arr, i) => {
return arr.map((letter, j) => String(letter | newArr2[i][j]).replace(/1/g, '#').replace(/0/g, ' '));
}).map(arr => arr.join(''));
}
|
)는 OR 조건과 유사하다. 반면 비트 연산자(|
) 는 boolean이 아니라 십진수를 반환한다. (1|0)
이면 1이 true이기 때문에 1을 반환. (or은 하나라도 true이면 true값을 바로 반환하기 때문에)padStart()
는 특정 문자를 원하는 길이만큼 문자열 '앞'에 더해준다. '뒤쪽'에 더해져야 한다면 padEnd()
메서드를 사용할 수 있다.\
)는 사용하지 않는다. 그냥 /1/g
면 1을 찾아준다.function solution(n, arr1, arr2) {
return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' '));
}
const addZero = (n, s) => {
return '0'.repeat(n - s.length) + s;
}
와 map으로 완전 깔끔하게 풀었네용...! padStart, padEnd 잊고 있었는데, 오래만에 보니 다시 기억나네요 ㅎㅎ 전 오늘 링크드리스트 문제를 만났는데 전혀 새로운 느낌을 받았네여 ㅎㅎㅎㅎ 프린이 파이팅!