[프로그래머스] [1차]비밀지도
문제풀이
지도는 한 변의 길이가 n인 정사각형 배열 형태
각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다
지도 2장이 주어지는데 암호화 된 배열로 주어지고, 부호화 했을 때 얻어지는 이진수에 해당하는 배열 값이다
- arr1 에 대한 해독 된 배열 값을 구하고
- arr2 에 대한 해독 된 배열 값을 구한다
- 위 값을 구할 함수
getMap
함수를 작성한다toString
내장 메서드를 이용하여 2진수 변환을 해주고 주어진 n의 길이보다 짧게 변환 되었다면repeat
으로 0만큼 앞의 문자열을 채워준다
- 이중 for문을 돌면서 구해진 두 배열의 값으로 각 자리의 문자열을 비교해가며 둘 중 한개의 값이 1일 경우 '#' 을 추가하고 아닐경우는 ' ' 공백을 추가해준다.
작성코드
function solution(n, arr1, arr2) {
const result = [];
let map1 = getMap(arr1,n)
let map2 = getMap(arr2,n)
for(let i=0; i<n; i++){
// debugger
result[i] = '';
for(let j=0; j<n; j++){
if(map1[i][j] === '1' || map2[i][j] === '1') result[i] += '#'
else result[i] += ' '
}
}
return result
}
function getMap(arr,n){
return arr.map((el) => {
let val = el.toString(2) // 2진수 변환
let repeatNum = n-val.length // 구해진 값에서 n길이만큼 되는지 확인 안되면 0으로 앞 채워주기
return repeatNum !== 0 ? '0'.repeat(repeatNum) + val : val
})
}
놓친부분
배열안의 타입을 지정해 주지 않고 문자열을 추가하게 되면 undifined 가 먼저 들어간다
실행한 결괏값
["undefined#####","undefined# # #","undefined### #","undefined# ##","undefined#####"]이(가)
기댓값 ["#####","# # #","### #","# ##","#####"]와(과) 다릅니다.
개선하고 싶은 부분
고차함수메서드를 쓰고싶었으나 이중 for문 외에 어떻게 값을 비교할 지 생각을 못했다.
조금 더 빠른 시간복잡도를 위해 개선하고 싶었는데 마땅한 수가 생각이 나지 않아
다른분들의 풀이를 보고 참고해야겠다.
Author And Source
이 문제에 관하여([프로그래머스] [1차]비밀지도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sssssssssy/프로그래머스-1차비밀지도저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)