풀이
/**
* 비밀지도.js
* https://programmers.co.kr/learn/courses/30/lessons/17681?language=javascript
*/
function solution(n, arr1, arr2) {
let answer = new Array(n).fill(null);
return answer.map((num, idx) => {
let binary = (arr1[idx] | arr2[idx]).toString(2);
binary = binary.padStart(n, 0);
binary = binary.replace(/1/g, '#');
return binary.replace(/0/g, ' ');
});
}
Topic - 비트 연산
OR 비트 연산을 통해 나온 결과 값을 2진수로 만든 후 1과 0을 #과 공백으로 나타내주는 문제다.
OR 연산을 마친 값을 toString(2) 를 통해 2진수로 만들어준다.
2진수로 만들 경우 가장 앞의 숫자가 1일 때까지 전방에 위치한 0들이 삭제되나 이 문제에선 앞에 위치한 0이라도 n자리수에 맞춰서 필요하므로 padStart 를 사용해 0의 갯수를 n자리수 만큼 맞춰준다.
이제 replace 를 통해 1을 #으로, 0을 공백으로 바꿔주면 끝이다.
리팩토링
/** 축약 version */
function solution(n, arr1, arr2) {
return arr1.map((arr1Item, idx) => (arr1Item | arr2[idx]).toString(2).padStart(n, 0).replace(/1/g, '#').replace(/0/g, ' '));
}
첫 풀이에서 명시성을 위해 사용한 new Array 와 변수를 생략하고, 체이닝을 포함해 정리해주면 위와 같은 모양이된다.
축약이나 패턴 등은 리팩토링의 산물임을 잊지말자.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][자바스크립트][Level2][카카오] 방금그곡 (0) | 2022.02.16 |
---|---|
[프로그래머스][자바스크립트][Level2][카카오] 메뉴 리뉴얼 (0) | 2022.02.14 |
[프로그래머스][자바스크립트][Level1][카카오] 다트 게임 (0) | 2022.02.11 |
[프로그래머스][자바스크립트][Level1][카카오] 신고 결과 받기 (0) | 2022.02.11 |
[프로그래머스][자바스크립트][Level2] 위장 (0) | 2022.01.10 |
댓글