문제
항해99 본과정 알고리즘 주차 마지막 날이다.
프로그래머스 1차 비밀지도 문제에서 막히는 부분이 발생했다.
주어진 숫자를 이진법으로 변환해서 활용해야하는데
문제는 이진법으로 변환한 숫자를 주어진 길이인 n만큼 맞춰줘야한다는 것이었다.
예를들면 n = 5 였을 때 숫자 9를 이진법으로 변환하면 1001이 된다.
1001의 길이는 4이기 때문에 조건을 맞추려면 앞에 0을 붙여줘야한다.
하지만 아무리 해도 앞에 0이 붙지 않았다.....
시도
function solution(n, arr1, arr2) {
let arr1Binary = [];
arr1.map((a) => arr1Binary.push(a.toString(2)))
let arr2Binary = [];
arr2.map((a) => arr2Binary.push(a.toString(2)))
let answer = new Array(n).fill('')
// .map((a) => a.padStart(n, '#'));
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (arr1Binary[i][j] === '0' && arr2Binary[i][j] === '0') {
answer.splice(i, 0, ' ')
} else if (arr1Binary[i][j] === '1' || arr2Binary[i][j] === '1') {
answer.splice(i, 0, '#')
}
}
}
return answer
}
빈 배열을 선언하여 arr1과 arr2의 각 요소를 이진수로 변환해서 넣어준 것 까지는 좋았는데
다음 단계로 넘어가려면 이진수의 길이가 n 미만이면 앞에 0을 붙여줘야했다.
하지만 이렇게 저렇게 해봐도 붙여지지가 않았다.
해결
function solution(n, arr1, arr2) {
let arr1Binary = [];
arr1.map((a) => arr1Binary.push(a.toString(2).padStart(n, '0')))
let arr2Binary = [];
arr2.map((a) => arr2Binary.push(a.toString(2).padStart(n, '0')))
let answer = new Array(n).fill('')
// .map((a) => a.padStart(n, '#'));
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (arr1Binary[i][j] === '0' && arr2Binary[i][j] === '0') {
answer[i] += ' '
} else if (arr1Binary[i][j] === '1' || arr2Binary[i][j] === '1') {
answer[i] += '#'
}
}
}
return answer
}
결국 구글링을 통해 해결 방법을 찾았다.
바로 padStart 메서드였다.
문자열에 원하는 길이만큼 특정 문자를 붙여주는 기특한 녀석이다.
그래서 n 길이가 맞춰지도록 0을 넣어주었다. 그래서 다음 단계로 나아갈 수 있었는데....
또 문제가 생겼다.
반복문을 돌려서 두 배열의 같은 인덱스에 있는 요소를 비교한 후 결과에 따라
공백 또는 #을 넣어주어야하는데 넣어지지가 않았다.....
각 배열에 요소들이 문자열로 들어가 있는데 2차원 배열로 생각하고 자꾸 배열 메서드로 붙여주려고 한 것이 문제였다.
다시 한번 나의 멍청함에 개탄을 하며 위와 같이 수정해주었다.
그래서 해결 완료!!
알게된 것
문자열 앞 혹은 뒤에 자리수만큼 특정 문자 채우기!!
유용한 메서드를 알게 되었다. 부디 까먹지 않기를.....
그리고 데이터 타입을 꼭 염두에 두고 코드를 짜자!!!
문자열 앞에 채우기
let str = '123'
str.padStart(5, '0') //'00123'
문자열 뒤에 채우기
let str = '123'
str.padEnd(5, '0') //'12300'
'Development > TIL' 카테고리의 다른 글
TIL - Promise와 await 연산자 (feat. vs GPT) (0) | 2023.04.16 |
---|---|
JS의 비동기적 처리 (근데 이제 Non - Blocking을 곁들인) (0) | 2023.04.14 |
소수 구하기 (feat.에라토스테네스의 체) (0) | 2023.04.12 |
문자열과 영단어 (0) | 2023.04.11 |
N진법 변환 (0) | 2023.04.10 |