✏️기록하는 즐거움
article thumbnail

 

|  제출

function solution(n, arr1, arr2) {
  let newArr = [];

  for (let i = 0; i < n; i++) {
    newArr.push((arr1[i] | arr2[i]).toString(2));
  }

  return newArr.map((item) =>
    item
      .padStart(n, 0)
      .split("")
      .map((num) => (num === "1" ? "#" : " "))
      .join("")
  );
}

 

|  풀이과정

비트 OR 연산자( | )는 대응되는 비트 중에서 하나라도 1이면 1을 반환한다.

현재 두 그림을 더했을 때 벽인 부분은 전체 지도에서도 벽이되고, 모두 공백인 부분만 전체 지도에서 공백이다.

벽은 1, 공백은 0으로 표현되기 때문에 주어진 두 배열을 비트 OR 연산을 해주어야 한다.

 

이진수 값을 가지고 #과 공백으로 표현해서 출력해야하기 때문에 비트 OR 연산을 해준 값을 이진수로 변환하여 저장한다.

 

예시에서 9의 경우 이진수로 표현하게 되면 1001이 된다. 하지만, 한 변 크기가 5이기 떄문에 01001로 만들어주기 위해서 padStart를 사용한다.

 

padStart로 주어진 n의 길이에 맞게 0을 채워주면 100101001이 되고, 각 이진수에 맞게 변환이 필요하기 때문에 map 메서드를 써주기 위해서 split("")을 사용했다.

#과 공백으로 변환해준 뒤, join("")으로 다시 합쳐주면 완료!

 

|  개념

Number.prototype.toString([radix])

console.log((6).toString(2));     // '110'
console.log((254).toString(16));  // 'fe'
  • 2와 36사이의 정수 radix를 지정하면 해당 진수에 맞게 Number 객체를 문자열로 반환한다.

String.prototype.padStart()

  • 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환한다.
str.padStart(targetLength [, padString])
  • 매개변수
    • targetLength - 목표 문자열 길이
    • padString - 현재 문자열에 채워넣을 다른 문자열

 

profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!