알고리즘/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함수를 사용 해 주었습니다.