문제 및 조건
나의 풀이
처음에 이 문제를 접했을 땐, '엥? 그래서 뭘 구하라는거지?' 라는 생각이 들었다.
그리고나서 입출력 예제를 본 후에 '벽'과 '공백'을 나타내는 배열을 만들어야 한다는 것을 알게 되었다.
이 문제를 보자마자 이렇게 풀어야겠다는 생각이 들었다. 그 순서는 다음과 같다.(그 때 노트에 적은 내용 그대로)
1. arr1 2진수 변환(n자리)
arr2 2진수 변환(n자리)
2. 2. arr1의 각 요소의 문자열 각각의 자리, arr2의 각 요소의 문자열 각각의 자리에 하나라도 1이 존재하면 새로운 배열의 i번째 자리에 "#" 넣기
3. arr1의 각 요소의 문자열 각각의 자리, arr2의 각 요소의 문자열 각각의 자리에 하나라도 1이 존재하지 않으면 새로운 배열의 i번째 자리에 " " 넣기
공책에는 이와 같이 적어놓았는데, 간단한 예를 들어보자면 arr1[1]의 첫번째 자리가 1이고 arr2[1]의 첫 번째 자리가 1이면 newArr[1]의 첫 번째 자리가 "#"이 되도록 해야겠다고 구상했다.
그리고 그대로 옮긴 코드가 다음과 같다.
function solution(n, arr1, arr2) {
let newArr = [];
let arr1Binary = arr1.map((el) => {
return el.toString(2).padStart(n, '0');
})
let arr2Binary = arr2.map((el) => {
return el.toString(2).padStart(n, '0');
})
for (let i = 0; i < arr1Binary.length; i++) {
let newNum = '';
for (let j = 0; j < arr1Binary[i].length; j++) {
if (arr1Binary[i][j] === '1' || arr2Binary[i][j] === '1') {
newNum += '#';
} else {
newNum += ' '
}
}
newArr.push(newNum);
}
return newArr;
}
1. 1번을 구체화 시키기 위해서 toString(2)를 이용해 주어진 숫자를 문자열로 바꿔주었고 문제에 주어진 n자리수로 바꿔주기 위해 padStart 를 사용해줬다.
(신기했던게 padStart는 프로젝트 발표를 준비하면서 코드리뷰를 했었는데 clock.js안에 padStart를 사용했었다.)
2 - 3.그 후 2번을 구체화 시키기 위해 if문을 사용해 각 자리의 값이 1로 같으면 "#"를 추가하고 둘 중 하나라도 1이 아니라면 " " 공백을 넣어주었다. 그 후 i가 한바퀴 돌때마다 array의 index가 하나씩 완성되기 때문에 그 index를 하나씩 새로운 newArr에 넣어주었다.
'Algorithm' 카테고리의 다른 글
푸드 파이트 대회 [프로그래머스] (1) | 2023.10.17 |
---|---|
가장 가까운 같은 글자 [프로그래머스] (0) | 2023.10.16 |
정수 내림차순으로 배치하기 [프로그래머스] (1) | 2023.10.16 |
정수 제곱근 판별 [프로그래머스] (0) | 2023.10.16 |
문자열을 정수로 바꾸기 [프로그래머스] (0) | 2023.10.16 |