공부기록/자바스크립트 코딩테스트

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

_우지 2022. 6. 23. 11:25

 

 

문제링크

 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr

 

배운점

숫자 | 숫자 연산

자바스크립트에서 다음과 같이 숫자 | 숫자 연산을 하면 2진법으로 or 연산을 사용한 값이 리턴된다.

console.log(10|1) // 11
console.log(11|1) // 11

위 코드의 2진법 계산

 

자바스크립트에서 진법 변환

또 정말 편리하다 라고 생각 된 것이 다음과 같이 숫자에 toString(원하는 진수) 를 하면 해당 진법으로 변환한다는 것이다.

console.log((8).toString(2)) // 1000
console.log((8).toString(3)) // 22

 

다음 처럼 2진수로 변환한다음 | 을 사용하여 or 연산할 수도 있다.

console.log((8).toString(2) | (1).toString(2)) // 1001

 

특정진수 10진수로 변환

인수로는 parseInt('변환시키고자하는 문자열', 해당 수의 진수) 가 들어간다.

let target = "1000"
console.log(parseInt(target,2)) // 8

 

padStart

또한 이 문제에서 8 과 같은 수는 2진법으로 표현하면 1000 이 될 것이다. 

하지만 지도가 5 x 5 의 크기라면 한자리수가 비어서 문제가 된다.

그럴때 빈자리를 채우기 위해 padStart 메소드를 사용한다.

 console.log((8).toString(2).padStart(6,"0")) // 001000
 console.log((8).toString(2).padStart(5,"0")) // 01000

 

padEnd

padEnd는 뒤에 파라미터에 넣은 문자를 넣어준다.

console.log((8).toString(2).padEnd(6,"0")) // 100000

 

문제풀이

function solution(n, arr1, arr2) {
    var answer = [];
    for (let i=0; i<n; i++){
        let target = (arr1[i] | arr2[i]).toString(2).padStart(n,0)
        let str = ''
        for (let j=0; j<n; j++){
            if(target[j]=='1'){
                str += "#"
            }
            else {
                str += " "
            }
        }
        answer.push(str)
    }
    return answer;
}