알고리즘 문제 풀기

프로그래머스 : [1차] 비밀지도 - javascript(toString(), padStart())

Fo_rdang 2024. 4. 5. 12:47
반응형

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/17681

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이 힌트 

 

  • n과 두 정수 배열 arr1, arr2를 입력받아 이진수로 변환합니다.
  • 변환된 이진수를 n자리로 맞추어 0으로 패딩합니다.
  • 각 자리의 비트를 비교하여 하나라도 1이면 "#"을, 둘 다 0이면 " "을 추가합니다.
  • 변환된 문자열을 모아 answer 배열에 저장합니다.
  • answer 배열을 반환하여 지도를 완성합니다.

 

정답 풀이 코드

// 주어진 n과 arr1, arr2를 사용하여 지도를 반환하는 함수
function solution(n, arr1, arr2) {
    // 결과를 저장할 배열 선언
    let answer = []; 
    
    // 배열의 길이만큼 반복
    for(let i = 0; i < n; i++) {
        // arr1과 arr2의 i번째 요소를 2진수 문자열로 변환하고, 길이를 n만큼 맞추어 0으로 패딩
        let a = (arr1[i]).toString(2).padStart(n, 0);
        let b = (arr2[i]).toString(2).padStart(n, 0);
        
        // 각 줄의 결과를 저장할 임시 문자열 선언
        let temp = ''; 
        
        // 각 줄의 각 자리수를 검사
        for(let j = 0; j < n; j++) {
            // 두 배열의 해당 자리의 값이 모두 0이면 빈 칸을 추가
            if(a[j] === "0" && b[j] === "0") temp += " ";
            // 하나라도 1이면 #을 추가
            else temp += "#";
        }
        
        // 완성된 줄을 결과 배열에 추가
        answer.push(temp);
    }
    
    // 최종 결과 반환
    return answer; 
}

 

Only 풀이 코드

function solution(n, arr1, arr2) {
    let answer = []; 
    for(let i=0; i<n; i++){
      let a = (arr1[i]).toString(2).padStart(n, 0)
      let b = (arr2[i]).toString(2).padStart(n, 0)
        let temp = ''; 
        for(let j=0; j<n; j++){
            if(a[j] === "0" && b[j] === "0") temp += " "
            else temp += "#"
        }
        answer.push(temp)
      }
    return answer; 
}

 

다른 사람 풀이 01. 

function solution(n, arr1, arr2) {
    let answer = [];
    for (let i = 0; i < n; i++) {
        answer.push(
            (arr1[i] | arr2[i])
            .toString(2)
            .padStart(n, 0)
            .replace(/1/gi, "#")
            .replace(/0/gi, " ")
        );
    }    
    return answer;
}

 

다른 사람 풀이 02.

function solution(n, arr1, arr2) {
  var answer = [];
  let c;
for(let i =0;i<n;i++){
  c = (arr1[i]|arr2[i]).toString(2).replace(/1/g,"#").replace(/0/g," ");
  while(c.length != n) {
    c = " " + c;
  }
  answer.push(c);
}
  return answer;
}
반응형