ν‹°μŠ€ν† λ¦¬ λ·°

문제

λ„€μ˜€λŠ” ν‰μ†Œ ν”„λ‘œλ„κ°€ λΉ„μƒκΈˆμ„ μˆ¨κ²¨λ†“λŠ” μž₯μ†Œλ₯Ό μ•Œλ €μ€„ 비밀지도λ₯Ό 손에 λ„£μ—ˆλ‹€. 그런데 이 λΉ„λ°€μ§€λ„λŠ” 숫자둜 μ•”ν˜Έν™”λ˜μ–΄ μžˆμ–΄ μœ„μΉ˜λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•”ν˜Έλ₯Ό 해독해야 ν•œλ‹€. λ‹€ν–‰νžˆ 지도 μ•”ν˜Έλ₯Ό 해독할 방법을 적어놓은 λ©”λͺ¨λ„ ν•¨κ»˜ λ°œκ²¬ν–ˆλ‹€.

  1. μ§€λ„λŠ” ν•œ λ³€μ˜ 길이가 n인 μ •μ‚¬κ°ν˜• λ°°μ—΄ ν˜•νƒœλ‘œ, 각 칸은 "곡백"(" ") λ˜λŠ” "λ²½"("#") 두 μ’…λ₯˜λ‘œ 이루어져 μžˆλ‹€.
  2. 전체 μ§€λ„λŠ” 두 μž₯의 지도λ₯Ό κ²Ήμ³μ„œ 얻을 수 μžˆλ‹€. 각각 "지도 1"κ³Ό "지도 2"라고 ν•˜μž. 지도 1 λ˜λŠ” 지도 2 쀑 μ–΄λŠ ν•˜λ‚˜λΌλ„ 벽인 뢀뢄은 전체 μ§€λ„μ—μ„œλ„ 벽이닀. 지도 1κ³Ό 지도 2μ—μ„œ λͺ¨λ‘ 곡백인 뢀뢄은 전체 μ§€λ„μ—μ„œλ„ 곡백이닀.
  3. "지도 1"κ³Ό "지도 2"λŠ” 각각 μ •μˆ˜ λ°°μ—΄λ‘œ μ•”ν˜Έν™”λ˜μ–΄ μžˆλ‹€.
  4. μ•”ν˜Έν™”λœ 배열은 μ§€λ„μ˜ 각 κ°€λ‘œμ€„μ—μ„œ λ²½ 뢀뢄을 1, 곡백 뢀뢄을 0으둜 λΆ€ν˜Έν™”ν–ˆμ„ λ•Œ μ–»μ–΄μ§€λŠ” μ΄μ§„μˆ˜μ— ν•΄λ‹Ήν•˜λŠ” κ°’μ˜ 배열이닀.

λ„€μ˜€κ°€ ν”„λ‘œλ„μ˜ λΉ„μƒκΈˆμ„ 손에 넣을 수 μžˆλ„λ‘, λΉ„λ°€μ§€λ„μ˜ μ•”ν˜Έλ₯Ό ν•΄λ…ν•˜λŠ” μž‘μ—…μ„ 도와쀄 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ.

μž…λ ₯ ν˜•μ‹

μž…λ ₯으둜 μ§€λ„μ˜ ν•œ λ³€ 크기 n κ³Ό 2개의 μ •μˆ˜ λ°°μ—΄ arr1, arr2κ°€ λ“€μ–΄μ˜¨λ‹€.

  • 1 ≦ n β‰¦ 16
  • arr1, arr2λŠ” 길이 n인 μ •μˆ˜ λ°°μ—΄λ‘œ 주어진닀.
  • μ •μˆ˜ λ°°μ—΄μ˜ 각 μ›μ†Œ xλ₯Ό μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œμ˜ κΈΈμ΄λŠ” n μ΄ν•˜μ΄λ‹€. 즉, 0 ≦ x β‰¦ 2n - 1을 λ§Œμ‘±ν•œλ‹€.

좜λ ₯ ν˜•μ‹

μ›λž˜μ˜ 비밀지도λ₯Ό ν•΄λ…ν•˜μ—¬ '#', κ³΅λ°±μœΌλ‘œ κ΅¬μ„±λœ λ¬Έμžμ—΄ λ°°μ—΄λ‘œ 좜λ ₯ν•˜λΌ.

μž…μΆœλ ₯ 예제

λ§€κ°œλ³€μˆ˜κ°’

n 5
arr1 [9, 20, 28, 18, 11]
arr2 [30, 1, 21, 17, 28]
좜λ ₯ ["#####","# # #", "### #", "# ##", "#####"]

λ§€κ°œλ³€μˆ˜κ°’

n 6
arr1 [46, 33, 33 ,22, 31, 50]
arr2 [27 ,56, 19, 14, 14, 10]
좜λ ₯ ["######", "### #", "## ##", " #### ", " #####", "### # "]

 

λ¬Έμ œν’€μ΄

  1. 해독화 된 지도λ₯Ό μ–»κΈ° μœ„ν•΄μ„œ 주어진 배열을 μ΄μ§„μˆ˜λ‘œ λ³€ν™˜
  2. 해독화 된 2개의 지도 μ€‘μ—μ„œ ν•˜λ‚˜λΌλ„ 벽이 있으면 벽이 있기 λ•Œλ¬Έμ— μ΄μ§„μˆ˜μΈ 두 κ΅¬κ°„μ˜ 합이 1이상이면 # μΆ”κ°€
  3. 해독화 된 2개의 지도 λͺ¨λ‘ 곡백일 κ²½μš°μ—λ§Œ 곡백이기 λ•Œλ¬Έμ— μ΄μ§„μˆ˜μΈ 두 κ΅¬κ°„μ˜ 합이 0일 κ²½μš°μ— 곡백열 μΆ”κ°€

μ½”λ“œ

function changeBinary(x, n) {
  let tmpArr = [];
  while (x) {
    tmpArr.push(x % 2);
    x = parseInt(x / 2);
  }
  while (tmpArr.length < n) tmpArr.push(0); //μ΄μ§„μˆ˜μ˜ 값이 μ •μˆ˜ λ°°μ—΄ 길이 n의 κ°’λ§ŒνΌ λ‚˜μ˜¬ 수 μžˆλ„λ‘ 0을 μΆ”κ°€
  return tmpArr.reverse();
}

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

  for (let i = 0; i < n; i++) {
    newArr1.push(changeBinary(arr1[i], n));
    newArr2.push(changeBinary(arr2[i], n));
  }

  for (let i = 0; i < n; i++) {
    let tmpCode = "";
    for (let j = 0; j < n; j++) {
      if (newArr1[i][j] + newArr2[i][j] >= 1) tmpCode += "#";
      else tmpCode += " ";
    }
    answer.push(tmpCode);
  }

  return answer;
}

 

λ‹€λ₯Έ μ‚¬λžŒ 풀이

function solution(n, arr1, arr2) {
    return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' '));
}

const addZero = (n, s) => {
    return '0'.repeat(n - s.length) + s;
}

Number.prototype.toString() μΈμžκ°’μ— 따라 μ§„μˆ˜μ˜ 값을 달리 ν‘œν˜„ν•  수 μžˆλ‹€λŠ” 점을 ν™œμš©ν•œ 점이 μ΄μƒ‰μ μ΄μ—ˆλ‹€.

λ˜ν•œ ν•¨μˆ˜μ˜ 맀개 λ³€μˆ˜μ— |(or) 연산을 μ‚¬μš©ν•˜λ©΄ 두 개의 인자λ₯Ό ν•©ν•œ 값을 λ°”λ‘œ 할당해쀄 수 μžˆλ‹€λŠ” 점을 ν•™μŠ΅ν•  수 μžˆμ—ˆλ‹€.

 

var solution=(n,a,b)=>a.map((a,i)=>(a|b[i]).toString(2).padStart(n,0).replace(/0/g,' ').replace(/1/g,'#'))

이 μ½”λ“œ 같은 κ²½μš°λŠ” μ•žμ„  μ½”λ“œμ™€ μ „λ°˜μ μΈ κ΅¬ν˜„μ€ λΉ„μŠ·ν•˜λ‚˜ 0을 길이 n만큼 μΆ”κ°€ν•΄μ£ΌλŠ” ν•¨μˆ λ₯Ό λŒ€μ‹ ν•˜μ—¬ String.prototype.padStart()λ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€λŠ” 점이 μ΄μƒ‰μ μ΄μ–΄μ„œ 가져와 λ΄€λ‹€.

padStart() λ©”μ„œλ“œλŠ” ν˜„μž¬ λ¬Έμžμ—΄μ˜ μ‹œμž‘μ„ λ‹€λ₯Έ λ¬Έμžμ—΄λ‘œ μ±„μ›Œ, 주어진 길이λ₯Ό λ§Œμ‘±ν•˜λŠ” μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€. μ±„μ›Œλ„£κΈ°λŠ” λŒ€μƒ λ¬Έμžμ—΄μ˜ μ‹œμž‘(쒌츑)λΆ€ν„° μ μš©λ©λ‹ˆλ‹€.

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG
more
Β«   2024/10   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
κΈ€ 보관함