비밀지도

이종호·2021년 4월 7일
0

알고리즘

목록 보기
3/10
post-thumbnail

내 풀이

function solution(n, arr1, arr2) {
  var answer = [];

  let b_arr1 = toBinary(arr1, n);
  let b_arr2 = toBinary(arr2, n);

  for (let i = 0; i < n; i++) {
    let line = ""
    for (let j = 0; j < n; j++) {
      if (b_arr1[i][j] === '0' && b_arr2[i][j] === '0') {
        line += " "
      } else {
        line += "#"
      }
    }
    answer.push(line)
  }

  return answer;
}

function toBinary(arr, n) {
  let b_arr = []
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].toString(2).length < n) {
      let plus_z = n - arr[i].toString(2).length;
      let p_z = ""
      for (let j = 0; j < plus_z; j++) {
        p_z += "0"
      }
      b_arr[i] = p_z + arr[i].toString(2);
    } else {
      b_arr[i] = arr[i].toString(2)
    }
  }
  return b_arr;
}

매우 길다.

다른사람 풀이(gyim1345)

다름사람 풀이를 보니 역시 1~2줄에 끝내신 분이 계시고
보기좋게 모듈형식으로 만든 사람들이 있다.

나는 우선 보기좋은 모듈형식으로 만드는게 좋다고 생각하기 때문에 한번 쓱 보고 다시 내 코드를 수정하는 시간을 가져볼까 한다.

내가 본 받고 싶은 풀이

const solution = (n, arr1, arr2) => {
    const binaryStringArray1 = decimalToBinary(arr1, n);
    const binaryStringArray2 = decimalToBinary(arr2, n);
    const map1 = binaryStringArray1.map(splitToNumbers)
    const map2 = binaryStringArray2.map(splitToNumbers)
    const combinedMap = sumArray(map1, map2);

    return numberToSharpAndEmpty(combinedMap).map(v => v.join(''));
}

const numberToSharpAndEmpty = (arr) => {    
    return arr.map((v1, i1) => {
        return v1.map((v2, i2) => {
            return (v2 === 0) ? ' ' : '#';  
        }
    )})

    console.log(x)
};


const sumArray = (arr1, arr2) => arr1.map((v1, i1) => v1.map((v2, i2) => v2 + arr2[i1][i2]));

const decimalToBinary = (array, n) => array.map(item => item.toString(2).padStart(n, '0'));

const splitToNumbers = (str) => str.split('').map(e => Number(e));

왜?

  • 모듈 형식으로 잘 나눈것 같다.
  • padStart, map에 대한 활용이 뛰어나시다.(map에 대한 활용은 단기간에 활용할 순 없겠지만 끊임없이 보고 따라 써보는 수 밖에 없지 않을 까 생각한다.)
profile
코딩은 해봐야 아는 것

0개의 댓글