한 걸음씩

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

Programmers

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

winter17 2023. 7. 19. 11:01

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(n, arr1, arr2) {
    let biArr1 = []
    let biArr2 = []
    // 전부 이진수로 변경하는데 길이를 n으로 맞춰야함(padStart)
    for (let i = 0; i < arr1.length; i++){
        const bi1 = arr1[i].toString(2)
        const bi2 = arr2[i].toString(2)
        biArr1.push(bi1.padStart(n, '0'))
        biArr2.push(bi2.padStart(n, '0'))
        
    }
    // console.log(biArr1, biArr2)
    
    let total = []
    for (let i = 0; i < biArr1.length; i++){
        // 배열의 요소를 쪼개서 계산할 수 있도록!
        const arr1 = biArr1[i].split('')
        const arr2 = biArr2[i].split('')
        // console.log(arr1, arr2)
        
        // '1'과 '0'을 공백이나 '#'으로 바꾸기
        let binary = []
        for (let j = 0; j < arr1.length; j++){
            if (arr1[j] === '1' || arr2[j] === '1'){ // 둘 중 하나라도 '1'이면 '#'
                binary.push('#')
            }else if (arr1[j] === '0' && arr2[j] === '0'){ // 둘 다 '0'이면 공백
                binary.push(' ')
            }
        }
       total.push(binary.join('')) // 배열을 문자열로 만들어서 total배열에 push
       // console.log(binary)
    }
    // console.log(total)
    return total;
}

 

입력값 〉	6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10]

console.log(biArr1, biArr2)
biArr1 = [ '01001', '10100', '11100', '10010', '01011' ] 
biArr1 = [ '11110', '00001', '10101', '10001', '11100' ]

console.log(arr1, arr2)
[ '1', '0', '1', '1', '1', '0' ] [ '0', '1', '1', '0', '1', '1' ]
[ '1', '0', '0', '0', '0', '1' ] [ '1', '1', '1', '0', '0', '0' ]
[ '1', '0', '0', '0', '0', '1' ] [ '0', '1', '0', '0', '1', '1' ]
[ '0', '1', '0', '1', '1', '0' ] [ '0', '0', '1', '1', '1', '0' ]
[ '0', '1', '1', '1', '1', '1' ] [ '0', '0', '1', '1', '1', '0' ]
[ '1', '1', '0', '0', '1', '0' ] [ '0', '0', '1', '0', '1', '0' ]

console.log(binary)
[ '#', '#', '#', '#', '#', '#' ]
[ '#', '#', '#', ' ', ' ', '#' ]
[ '#', '#', ' ', ' ', '#', '#' ]
[ ' ', '#', '#', '#', '#', ' ' ]
[ ' ', '#', '#', '#', '#', '#' ]
[ '#', '#', '#', ' ', '#', ' ' ]

console.log(total)
[ '######', '###  #', '##  ##', ' #### ', ' #####', '### # ' ]

리뷰

처음 이진수로 만드는 과정에서 자릿수를 맞춰야 하는데 이 부분을 내가 임의로 5로 설정하고 남는 부분을 0으로 채웠더니 계속 두 번째 테스트 통과를 못했는데, 6으로 바꾸니까 첫 번째 테스트를 통과를 못해서 뭘 고쳐야 둘 다 통과하는 거지 한참 고민을 했다.

알고 보니까 인수로 n을 받았고 문제에서 '한 변의 길이가 n'이라고 했는데 내가 이진수로 바꾸고 '#'과 공백으로 변환하는 과정에만 집중하느라 놓쳐서 보지 못한 부분이었다.