문제
길이가 n인 정사각형 배열로 각 칸은 공백 "" 또는 벽 # 으로 되어있을 때
전체 지도는 두 장의 지도를 겹쳐 얻을수 있는데 1, 2 중 어느 하나라도 벽인 부분은 전체 지도에서 벽이다
전체 지도의 배열 리턴
나의 풀이
function solution(n, arr1, arr2) {
const binaryRepresentation = (num, length) => {
const binary = num.toString(2);
return binary.length < length ? "0".repeat(length - binary.length) + binary : binary;
};
const array = [];
for (let i = 0; i < arr1.length; i++) {
const binaryArr1 = binaryRepresentation(arr1[i], n);
const binaryArr2 = binaryRepresentation(arr2[i], n);
console.log(binaryArr1, binaryArr2)
const row = binaryArr1
.split("")
.map((v, i) => (v === "0" && binaryArr2[i] === "0") ? " " : "#" )
.join('')
console.log(row)
array.push(row);
}
return array;
}
- 최대한 검색 안하면서 풀려고 노력 ㅠ
- binary : 이진수로 변환하고 지정된 길이로 맞춘다
- toString을 이용하여 이진수 변환
- 길이가 짧다면 0을 반복한다
- for
- 지도 1, 2 둘 다 현재 숫자를 이진수로 변환하고 지정된 길이로 맞춘다
- 이진수를 겹쳐 split을 사용하여 한글자씩 나눈후 map 을 사용해 해당 계산식에 맞게 수정후 join으로 합친다
- 글자가 0이면서 지도 2의 숫자도 0일시 " " 공백 아니면 # 을 넣는다
- 생성된 행을 배열에 추가하고 끝
다른 풀이
- 한참 긴 코드를 이리 줄일수 있다니 ㅠ 더 노력해야겠다
function solution(n, arr1, arr2) {
// arr1을 순회하면서 새로운 지도 배열을 생성
return arr1.map((v, i) => {
// 두 이진수를 OR 연산(|)을 통해 합친 뒤, 이진수로 변환하고 0으로 시작하도록 맞춤
const combinedBinary = (v | arr2[i]).toString(2);
const binaryWithZero = addZero(n, combinedBinary);
// 1 또는 0을 '#' 또는 공백으로 치환하여 한 행을 생성하고 반환
return binaryWithZero.replace(/1|0/g, a => +a ? '#' : ' ');
});
}
// 주어진 문자열의 길이가 n이 될 때까지 왼쪽에 0을 추가하는 함수
const addZero = (n, s) => {
return '0'.repeat(n - s.length) + s;
}
- arr1을 map 함수로 순회하며 새로운 지도 배열 생성
var solution = (n, a, b) => a.map((a, i) => (
(a | b[i]) // OR 연산을 통해 두 이진수를 합침
.toString(2) // 이진수로 변환
.padStart(n, 0) // 주어진 길이 n으로 맞추고, 부족한 부분은 0으로 채움
.replace(/0/g, ' ') // 0을 공백으로 치환
.replace(/1/g, '#') // 1을 '#'으로 치환
));
function solution(n, arr1, arr2) {
let num1, num2, s;
let answer = [];
// 주어진 숫자를 이진수로 변환하고 지도를 생성하는 반복문
for (let i = 0; i < n; i++) {
num1 = arr1[i];
num2 = arr2[i];
s = '';
for (let j = 0; j < n; j++) {
// 각 자릿수를 확인하여 '#' 또는 공백으로 지도를 생성
s = (num1 % 2 + num2 % 2) ? '#' + s : ' ' + s;
num1 = Math.floor(num1 / 2);
num2 = Math.floor(num2 / 2);
}
// 생성된 행을 배열에 추가
answer.push(s);
}
return answer;
}
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javaScript 푸드파이트 대회 (0) | 2023.11.27 |
---|---|
javaScript 숫자 배열 두 개 뽑아서 더하기 (1) | 2023.11.27 |
javaScript 배열 규칙에 따른 계산 (영어 끝말잇기) (0) | 2023.11.23 |
javaScript 문자열 계산하여 마음대로 정렬하기 (1) | 2023.11.22 |
javaScript 배열 계산 후 k번째 수 구하기 (1) | 2023.11.22 |