메소드를 많이 알아두면 좋은 점: 비밀지도🗺

9rganizedChaos·2021년 1월 28일
0
post-thumbnail

비밀지도 문제

프로그래머스 비밀지도 문제

나의 풀이

처음에 이 문제를 아래와 같이 풀었다...

function solution(n, arr1, arr2) {
    
    function makeN(str, n){
        if(str.length === n){
            return str
        } else {
            str = 0 + str;
            return makeN(str, n)
        }
    }
    
    function wallAndSpace(str){
        let result = ''
        for(let i = 0; i < str.length; i++){
            if(str[i] === '0'){
                result = result + ' '
            } else if (str[i] === '1'){
                result = result + '#'
            }
        }
        return result;
    }
    
    let secretMap = []
    for(let i = 0; i < arr1.length; i++){
        let secretRow = ""
        let map1 = makeN(arr1[i].toString(2), n).split('')
        let map2 = makeN(arr2[i].toString(2), n).split('')
        for(let j = 0; j < map1.length; j++){
            secretRow = secretRow + (+map1[j] || +map2[j])
        }
        secretMap.push(secretRow)
    }
    return secretMap.map(n => wallAndSpace(n))
}

코딩을 시작한 내 입장에서 스스로 함수를 만들어서 쓴 것과 toString(n)을 통해 n진법을 구현한 것만으로도 뿌듯했으나... 이번에도 역시 다른 사람의 풀이를 보고 있으니, 현타가 씨게 온다...

다른 사람의 풀이

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

이런저런 메소드를 사용하니 위와 같이 한 줄로 풀 수 있는 것이었다...
문제에 활용될 수 있는 메소드를 간략하게 복붙하며 눈물로 포스팅을 마친다...

String.prototype.repeat()

'abc'.repeat(1);    // 'abc'
'abc'.repeat(2);    // 'abcabc'

String.prototype.padStart()

const str1 = '5';

console.log(str1.padStart(2, '0'));
// expected output: "05"

비트연산자

알고 있었지만 활용방법을 몰라 이용하지 못했었는데, 이번에 다른 사람들의 풀이를 보며 확실히 알게 되었다.

이진수로 바꿔주고 연산을 써야하는 줄 알았는데, 10진수 인 상태로 사용해주면, 알아서 이진수 비트연산을 하고 다시 결과를 십진수로 변환해서 출력해주는 것이었다...

String.prototype.replace()

const p = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';

const regex = /Dog/i;
console.log(p.replace(regex, 'ferret'));
// expected output: "The quick brown fox jumps over the lazy ferret. If the dog reacted, was it really lazy?"
profile
부정확한 정보나 잘못된 정보는 댓글로 알려주시면 빠르게 수정토록 하겠습니다, 감사합니다!

0개의 댓글