ComputerScience/알고리즘, 프로그래머스
[Lv.1] 비밀지도
VictorMeredith
2023. 1. 31. 16:25
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요소를 추가한다.