반응형
https://programmers.co.kr/learn/courses/30/lessons/17681
이 글을 읽는 사람들은 다 문제를 풀다가 검색해서 들어왔을거라 생각하고 문제를 설명하진 않겠다.
이 문제를 풀기위해 사용한 개념은
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줄로 끝내버린 풀이가 있었다.
이래서 정규표현식을 꼭 공부해야하는것같다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
프로그래머스 이상한 문자 만들기 JS (0) | 2021.12.30 |
---|---|
프로그래머스 : 하샤드 수 (0) | 2021.12.30 |
프로그래머스 문자열 내맘대로 정하기 ( JS, Array.sort() ) (0) | 2021.12.28 |
프로그래머스 : 모의고사 (자바스크립트) (0) | 2021.10.29 |
프로그래머스 : 크레인 인형 뽑기 (자바스크립트) (0) | 2021.10.29 |