TIL 010 | 비밀지도 - 프로그래머스 문제풀이

김태규·2021년 8월 3일
0
post-thumbnail

문제

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


나의 풀이

function solution(n, arr1, arr2) {
    var answer = [];
    for (let i=0; i<n; i++){
        let result = "";
        let a = arr1[i].toString(2);   // 2진법으로 변환
        let b = arr2[i].toString(2);
        
        for (let j=0; j<n; j++){
            if(a % 10 === 1 || b % 10 ===1) result+="#";
            else result+=" ";      // 숫자를 10으로 나눈 나머지로 일의 자리부터 하나씩 추출
            a = parseInt(a / 10);  // a와 b를 10으로 나눈 몫으로 새롭게 할당
            b = parseInt(b / 10);
        }
        result = result.split("").reverse().join("");  
        //split으로 문자열을 하나씩 쪼개고 reverse로 순서를 뒤집고 join으로 다시 하나로 연결
        answer.push(result);
    }
   
    return answer;
}

거의 40분에 걸쳐서 코드를 작성하고 콘솔창에 출력해보니 배열의 요소들이 기대값과 앞뒤 순서가 뒤집힌 것을 확인했다. 문자열의 순서를 뒤집는 방법을 구글링해봤고, 자바스크립트에는 문자열을 거꾸로 출력해주는 메서드는 없기 때문에 split("")으로 한 문자열씩 요소로 가지는 배열로 바꾸고, reverse( )로 배열의 순서를 뒤집은 다음, join("")으로 다시 배열에서 문자열로 바꾸는 방법을 찾을 수 있었다.


다른 사람의 풀이

function solution(n, arr1, arr2) {
    let num1, num2, s;
    let answer = [];
    for (let i=0; i<n; i++){
        num1 = arr1[i];
        num2 = arr2[i];
        s = '';
        for (let j=0; j<n; j++){
            s = (num1%2 + num2%2) ? '#'+s : ' '+s;
            num1 = Math.floor(num1/2);
            num2 = Math.floor(num2/2);
        }
        answer.push(s);
    }    
    return answer;
}

나의 풀이와 기본적으로 비슷하지만 쓸데없이 2진수로 변환도 하지 않았고, 문자열끼리의 덧셈으로 순서가 뒤집히는 일도 없는 것을 확인할 수 있었다.


지금까지 매우 기초적인 알고리즘 문제풀이만 해봤기에 아직 구현력이 많이 부족하다는 것을 느꼈고 갈 길이 멀지만 틈나는대로 알고리즘 문제풀이에 도전해보려고 한다.

0개의 댓글