[카카오1차] 비밀지도(프로그래머스)

정승옥(seungok)·2020년 12월 8일
0

프로그래머스

목록 보기
18/40
post-thumbnail

문제설명

  • 지도는 한 변의 길이가 n인 정사각형 배열 형태
  • '공백' 또는 '벽(#)' 두 종류로 이루어짐
  • 지도 1과 지도 2를 겹쳐 어느 하나라도 벽인 부분은 전체지도에서 벽, 모두 공백인 부분은 전체지도에서 공백
  • 지도 1과 지도 2는 정수 배열로 암호화되어 있음
  • 벽 부분을 1, 공백 부분을 0으로 부호화

입력형식

  • 한 변의 크기 n, 2개의 정수배열 arr1, arr2
  • 1<=n<=16
  • arr1, arr2는 길이가 n인 정수배열
  • 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n이하 즉, 0<=x<=2^n-1

풀이

function solution(n, arr1, arr2) {
    // doubleArr1, doubleArr2 정수배열 원소를 2진수로 변환하여 저장
    let answer = [];
    const doubleArr1 = arr1.map(num=>{
        let doubleNum = num.toString(2).split('');
        for(let i = doubleNum.length;i<n;i++){
            doubleNum.unshift('0');
        }
        return doubleNum.join('');
    });
    const doubleArr2 = arr2.map(num=>{
        let doubleNum = num.toString(2).split('');
        for(let i = doubleNum.length;i<n;i++){
            doubleNum.unshift('0');
        }
        return doubleNum.join('');
    });
    // 두 배열의 2진수 원소를 비교하여
    // 하나라도 1이면 1, 둘 다 0이면 0
    // 빈 문자열에 넣고 다 넣은 문자열을 빈배열 answer에 push
    for(let i=0;i<doubleArr1.length;i++){
        let emptyStr = '';
        const num1 = doubleArr1[i];
        const num2 = doubleArr2[i];
        
        for(let j=0;j<num1.length;j++){
            if(num1[j] === '1' || num2[j] === '1')
                emptyStr += '1';
            else
                emptyStr += '0';
        }
        answer.push(emptyStr);
    }
    // 결과적으로 나온 이진수 답안을 1->#, 0->공백으로 변환
    const answer2 = answer.map(key=>{
        const keyArr = key.split('').map(num=>{
            if(num === '1')
                return '#';
            else
                return ' ';
        })
        return keyArr.join('');
    });
    // 최종 답안 answer2 리턴
    return answer2;
}
profile
Front-End Developer 😁

0개의 댓글