[TIL] 카테고리/알고리즘 문제풀기

[자바스크립트] 프로그래머스 Lv.1 [1차] 보물지도

티레이니 2022. 5. 31. 03:59

 

 

 

let answer = []

let rowLength = Math.max(...arr1,...arr2).toString(2).split('').length
arr1 = arr1.map((rows) => rows.toString(2).split(''))
arr2 = arr2.map((rows) => rows.toString(2).split(''))

for (i=0; i<arr1.length; i++) {
  if (arr1[i].length < rowLength) 
  { arr1[i].unshift(...'0'.repeat((rowLength - arr1[i].length)).split('')) }
  
  if (arr2[i].length < rowLength) 
  { arr2[i].unshift(...'0'.repeat(rowLength - arr2[i].length).split('')) }

  answer.push(arr1[i].map((blocks, j) => { 
    blocks = blocks*1 + arr2[i][j]*1;
    return blocks > 0 ? '#' : ' ' } ).join(''))
}

 

1) 보물지도의 폭(↔)기준을 먼저 잡았다 -> 맨앞이 0 이면 자릿수가 사라지는 문제때문

2) arr1과 arr2에 담긴 숫자를 각각 2진수로 변환 후 한 글자씩 쪼갠 배열로 만들어주었다.

3) 보물지도의 높이(배열의 길이) 만큼 반복문을 돌렸다.

4) 우선 arr1 과 arr2에서 자릿수가 줄어든 아이들은 앞에 0을 unshift로 쫑쫑 넣어주었다.

5) 한 줄씩 arr1[ i ][ j ] + arr1[ i ][ j ] 해주고, 0일 때는 공백으로, 1이나 2일때는 #으로  바꿔주고 join

6) 짜잔 해결되었습니다! ... 3점받았다.

 

 

원래는 비트연산으로 푸는 문제라고 한다.

...? 그게 뭘까? 공부해봐야겠다.

 

 

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

 

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

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

programmers.co.kr