개발자 '쑥말고인절미'

[프로그래머스] JS [1차] 비밀지도 본문

STUDY/코딩테스트

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

쑥말고인절미 2022. 9. 21. 22:17

문제


내 답안

function solution(n, arr1, arr2) {
    var answer = [];

    for(let i=0; i<n; i++) {
        let totalTwo1 = '';
        let totalTwo2 = '';
        let num1 = arr1[i];
        let num2 = arr2[i];
        
        //2진법으로 변환
        while(num1 > 0) {
            let twoTemp1 = num1%2;
            num1 = parseInt(num1/2);
            totalTwo1 = String(twoTemp1) + totalTwo1;
        }
        
        while(totalTwo1.length != n) {
            totalTwo1 = '0' + totalTwo1;
        }
        
        while(num2 > 0) {
            let twoTemp2 = num2%2;
            num2 = parseInt(num2/2);
            totalTwo2 = String(twoTemp2) + totalTwo2;
        }
        
        while(totalTwo2.length != n) {
            totalTwo2 = '0' + totalTwo2;
        }

        //2진법 더하기
        let resultTwo = '';
        for(let j=0; j<n; j++) {
            resultTwo += String(parseInt(totalTwo1[j]) + parseInt(totalTwo2[j]));
        }
        
        //#, 공백 변환
        let ch = '';
        for(let j=0; j<n; j++) {
            parseInt(resultTwo[j]) > 0 ? ch += '#' : ch += ' ';
        }
        
        answer.push(ch);
    }
    return answer;
}

메모

진법 변환을 못해서 결국 구글링을 해서 배웠다. 참 마음이 안좋은 문제였는데 내가 너무 바보같이 풀기도 한거같고 친구는 map을 사용해서 간단하게 소스를 작성했다. 다른 사람들 소스를 보는데 정말 짧았다. 이게 뭐지... 싶은 수준으로 짧게 구현한걸 쉽게 볼 수 있었다. 이번 문제야 말로 다른 사람들 소스를 참고해서 공부하는게 좋겠다. 친구소스와 다른 사람들의 짧은 소스들을 아래에 옮겨놨으니 짬내서 들여다보자.

아래는 친구 소스이다.

function solution(n, arr1, arr2) {
    var answer = [];
    
    answer  = arr1.map((x,i) =>{
        return (x | arr2[i]).toString(2).padStart(n,0);
    });
    
    return answer.map((x) =>  x.replaceAll('1','#').replaceAll('0',' '));
}

아래는 다른 사람의 풀이

// 좋아요 33개
function solution(n, arr1, arr2) {
    return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' '));
}

const addZero = (n, s) => {
    return '0'.repeat(n - s.length) + s;
}
// 좋아요 24개
var solution=(n,a,b)=>a.map((a,i)=>(a|b[i]).toString(2).padStart(n,0).replace(/0/g,' ').replace(/1/g,'#'))
// 좋아요 3개
function solution(n, arr1, arr2) {
    return arr1.map((i, index) =>('0'.repeat(n) + (i | arr2[index]).toString(2)).slice(-n)).map(i => i.replace(/0/g, ' ').replace(/1/g, '#'));
}

참고링크

https://m.blog.naver.com/aroaroro/220597221604

 

알고리즘 10진수 에서 2진수 변환법 ! 2진수 에서 10진수 변환법 ~!! 모든 변환법!! [10진법 2진법]

안녕하세요.~ 반갑습니다. 오늘 알고리즘 에는 진법에 관해서 한번 올려보려고 합니다.!! 저도 진법이 아직...

blog.naver.com