프로그래머스 [비밀지도]

맹뿌·2021년 7월 3일
1

알고리즘 문제

목록 보기
3/5

💬 문제 요약

  1. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 “공백”(“ “) 또는 “벽”(“#”) 두 종류로 이루어져 있다.
  2. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 “지도 1”과 “지도 2”라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
  3. “지도 1”과 “지도 2”는 각각 정수 배열로 암호화되어 있다.
  4. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.


💬 풀이 방법

function solution(n, arr1, arr2) {
    var answer = [];
    let i, j;
    
    for(i = 0; i < n; i++) {
        answer[i] = arr1[i] | arr2[i];
        answer[i] = answer[i].toString(2);
        if(answer[i].length < n)
            answer[i] = answer[i].padStart(n, "0");
        for(j = 0; j < n; j++) {
            answer[i] = answer[i].replace("0", " ");
            answer[i] = answer[i].replace("1", "#");
        }        
    }
    
    return answer;
}
  • 잘못된 문제 접근
    1. arr1, arr2를 2진수로 바꾸고 비트 연산자를 사용하려 한 것!!!
    2. 비트 연산자는 | 인데, || 로 연산한 것!!!

  • 알게 된 점
    1. 비트 연산자를 사용할 때는 10진수 상태에서 사용
    2. 비트 연산자는 | 입니다.. || 는 논리 연산자 입니다!!
    3. 배열 안에 문자열이 (ex. ["01010", "11111", "10110"]) 등과 같은 형태로 있으면 2차원 배열과 유사하게 접근이 가능!!

문제 접근을 잘못된 방식으로 해서 1시간 반을 날렸습니다..ㅠ_ㅠ 그래도 큰 깨달음을 얻었네요ㅎ..ㅎ 앞으로는 문제 접근 방식과 코드 순서를 더 꼼꼼하게 고민해봐야 할 것 같습니다....

🎁 문제 출처

profile
무엇이든 할 수 있고, 무엇이든 될 수 있는

0개의 댓글