https://programmers.co.kr/learn/courses/30/lessons/17681
function solution(n, arr1, arr2) {
let answer=[]; //# 넣을 배열
arr1=arr1.map(v => v=v.toString(2).padStart(n, '0'));
arr2=arr2.map(v => v=v.toString(2).padStart(n, '0'));
for(let i=0; i<n; i++){
let tmp='';
for(let j=0; j<n; j++){
tmp+= (arr1[i][j]==='1'||arr2[i][j]==='1')? '#':' ';
}
answer.push(tmp);
}
return answer;
}
처음에 비트연산을 생각못하고 말도 안되는 방식으로 풀었다... 한시간동안 풀었지만 결국 너무 복잡한 방법으로 풀어서 실행시간도 오래걸리고 테케 모두를 통과하지 못했다.
결국 카카오 해설페이지를 보게되었는데, 비트연산자
를 사용하는 문제로, 정답율 80%를 넘은 문제였다. 이럴때마다 현타오긴 하지만, 난 아직 시험치는게 아니니까 괜찮다며, 계속해서 나아질거라며 나를 위로했다🥲
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;
}
정규표현식을 활용한 풀이이다. 차근차근 뜯어보자! 나도 정규표현식 잘 다룰날이 오겠지?
10진수를 2진수로 바꾸면, 앞에있는 0이 삭제되어 나타난다. 이럴 때 padStart()메소드를 사용할 수 있다.
padStart(n, '0')
은 문자열의 길이를 n으로 지정하고 문자열의 길이가 n 미만이라면 앞을 '0'으로 채우는 메소드이다.
앞으로 앞을 채워야하는 일이 생기면 padStart()를 떠올리자!
padStart mdn :
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
진수 변환은 예전에 푼 '3진법 뒤집기' 문제를 참고하자.
https://velog.io/@rladpwl0512/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-level1-3%EC%A7%84%EB%B2%95-%EB%92%A4%EC%A7%91%EA%B8%B0
카카오 해설:
https://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
2진법 자릿수 채우기:
https://chinsun9.github.io/2020/11/17/js-%EC%9D%B4%EC%A7%84%EC%88%98-%EC%95%9E%EC%97%90-0%EB%84%A3%EA%B8%B0/
10/26
Number화하면 앞에 채워넣은 0없어지니까 주의하기! (number화 하면 안됨)