본문 바로가기
ComputerScience/알고리즘, 프로그래머스

[Lv.1] 비밀지도

by VictorMeredith 2023. 1. 31.

1. 문제

2. 전략

 1) 지도1과 지도2 배열 각각 10진수를 2진수로 변경하여 spread연산자로 펼쳐서 0과 1로 된 배열 생성

 2) 생성된 지도1배열과 지도2배열을 비교하여 1이 존재하는 좌표는"#",  두 좌표 모두 0인 경우 0으로 치환

 3) 각각의 배열을 array.join('') 으로 연결하여 출력

function solution(n, arr1, arr2) {
    var answer = [];
    let a1 = [];
    let a2 = [];
    
    // 2진수의 a1 배열 생성
    for(i in arr1){ //정사각형이므로 arr1, arr2 둘다 같은수 반복으로 사용가능
        a1.push([...arr1[i].toString(2)])
        a2.push([...arr2[i].toString(2)])
    }

    //00001 등 앞수가 0이어서 2진수가 1이된 경우 정사각형 길이를 맞추기 위해 0 추가해줌 
    for(let k = 0; k< a1.length; k++){ //여기도 정사각형이므로 같은 수 반복 사용 가능
        while(a1[k].length < a1.length){
            a1[k].unshift('0')
        }
        while(a2[k].length < a2.length){
            a2[k].unshift('0')
        }
    }
    
    // 2차원 배열 순회하며 a1,a2 각 좌표 에 1이 하나 이상 존재하는 경우 a1좌표를 '#'으로 변경
    for(let j =0; j<a1.length; j++){ 
        for(let l =0; l<a1.length; l++){
            if(a1[j][l] === '1' || a2[j][l] === '1'){
                a1[j][l] = '#'
            }
            else{
                a1[j][l] = ' ' //두 좌표 모두 0인 경우 빈칸으로 변경
            }
        }
    }
    console.log(a1) //합쳐진 보물지도 좌표 확인
    
    for(p in a1){ //a1 배열을 순회하며 합쳐서 answer 배열에 추가
        answer.push(a1[p].join(''))
    }
    
    
    
    return answer;
}

3. 알아야할 사항

 1) array.unshift(a) : 배열의 맨 앞에 a요소를 추가한다.

댓글