본문 바로가기
개발/알고리즘

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

by 안뇽! 2021. 12. 28.
반응형

https://programmers.co.kr/learn/courses/30/lessons/17681

 

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

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

programmers.co.kr

이 글을 읽는 사람들은 다 문제를 풀다가 검색해서 들어왔을거라 생각하고 문제를 설명하진 않겠다.

 

이 문제를 풀기위해 사용한 개념은

1. 2진법으로 바꾸기 => toString()

2. 자릿수맞추기 => padStart(n,0)

이다.

 

먼저 arr1,arr2의 각 요소를 n자리 2진법으로 바꾸어보자.

 

function solution(n, arr1, arr2) {
    //arr1,arr2에서 벽인부분은 벽임 -> 1
    //나머지는 공백 -> 0
    //1. 먼저 2진법
    //2. 2진법을 다 n자리로 바꾸기 padStart(n,0)
    let list1 = arr1.map(el=>{
        const byNum = el.toString(2).padStart(n,0).split('')
        return byNum
        
    })
    let list2 = arr2.map(el=>{
        const byNum = el.toString(2).padStart(n,0).split('')
        return byNum
    })
    
    ..(생략)..
}

위와같이 작성했다면 나머지는 2중반복문을 이용하여 배열매핑이다.

이는 개념이 필요하다기보다 많이해보았다면 손쉽게 할 수 있는 과정이다.

function solution(n, arr1, arr2) {
    //arr1,arr2에서 벽인부분은 벽임 -> 1
    //나머지는 공백 -> 0
    //1. 먼저 2진법
    //2. 2진법을 다 5자리로 바꾸기 padStart(5,0)
    let list1 = arr1.map(el=>{
        const byNum = el.toString(2).padStart(n,0).split('')
        return byNum
        
    })
    let list2 = arr2.map(el=>{
        const byNum = el.toString(2).padStart(n,0).split('')
        return byNum
    })
    //n개의 요소를 가진 배열 ans선언
    let ans=new Array(n).fill('')
    
    for(let i = 0;i<n;i++){
        for(let j = 0;j<n;j++){
        //list1이나 list2에 "1"인 요소가 있다면 ans[i]에 '#'추가
        //"1"이 아니라면 공백 추가
            if(list1[i][j]==="1"||list2[i][j]==="1"){
                ans[i]+='#'
            } else ans[i]+=' '
        }
    }
    return ans
}

 

다른사람들의 풀이를 보니 정규표현식을 이용하여 나의 2중반복문 과정을 1줄로 끝내버린 풀이가 있었다.

 

이래서 정규표현식을 꼭 공부해야하는것같다.

반응형