알고리즘/test
javascript) 프로그래머스 - [1차] 비밀지도
이경찬 :)
2023. 2. 22. 11:43
https://school.programmers.co.kr/learn/courses/30/lessons/17681
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
실행코드
function solution(n, arr1, arr2) {
var answer = [];
for(i = 0; i < n; i++){
const combined = arr1[i] | arr2[i];
const newCombined = combined.toString(2).padStart(n,"0");
var newString = '';
for(k = 0; k < newCombined.length; k++){
if(newCombined[k] === '0'){
newString += ' ';
}else{
newString += '#';
}
}
answer.push(newString);
}
return answer;
}
풀이
먼저 직관적으로 풀어보았습니다.
arr1 과 arr2를 for문으로 탐색하면서 or 연산을 해준 combined를 선언을 해 주었고 그 combined를 2진법 그리고 칸이 부족할시 n 개로 0을 채워서 선언을 해주었고 newString은 newCombined에다가 ex) '10111'이면 '# ###'으로 바꿔주는 작업을 하였습니다
개선된풀이
function solution(n, arr1, arr2) {
const answer = arr1.map((value, index) => {
const combined = value | arr2[index];
const newCombined = combined.toString(2).padStart(n, "0");
return newCombined.replace(/0/g, " ").replace(/1/g, "#");
});
return answer;
}
풀이
1. 'let' 또는 'const'를 사용하여 루프 변수의 의도하지 않은 전역 변수 생성을 방지 해 주었습니다.
2. if else문 보다 simple한 replace를 사용해 주었습니다.
3. 코드의 간결합을 위해 map함수를 사용 해 주었습니다.