4 min read

[1μ°¨] 비밀지도 - ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅

Table of Contents

이직 μ€€λΉ„λ₯Ό ν•˜λ©΄μ„œ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅μ„ ν•˜κ³  μžˆλŠ”λ°, ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€λΌλŠ” μ‚¬μ΄νŠΈμ˜ 문제λ₯Ό ν’€μ–΄λ³΄κΈ°λ‘œ ν–ˆλ‹€. κ·Έ 쀑 2018 KAKAO BLIND RECRUITMENT의 [1μ°¨] λΉ„λ°€μ§€λ„λΌλŠ” 문제 풀이

문제

문제 열어보기

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

  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을 λ§Œμ‘±ν•œλ‹€.

좜λ ₯ ν˜•μ‹

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

μž…μΆœλ ₯ 예제

λ§€κ°œλ³€μˆ˜κ°’
n5
arr1[9, 20, 28, 18, 11]
arr2[30, 1, 21, 17, 28]
좜λ ₯[”#####”,”# # #”, ”### #”, ”# ##”, ”#####β€œ]
λ§€κ°œλ³€μˆ˜κ°’
n6
arr1[46, 33, 33 ,22, 31, 50]
arr2[27 ,56, 19, 14, 14, 10]
좜λ ₯[”######”, ”### #”, ”## ##”, ” #### ”, ” #####”, ”### # β€œ]

풀이

μœ„μ˜ 문제λ₯Ό 보고 이미지에도 μ£Όμ–΄μ§€λ“― 2진법을 μ΄μš©ν•œ ν’€μ΄λΌλŠ” 것을 μ•Œκ²Œλ˜κ³  |λΌλŠ” λΉ„νŠΈμ—°μ‚°μ„ μ΄μš©ν•΄ ν’€λ €κ³  ν–ˆλ‹€. 근데 ν‰μ†Œμ— λΉ„νŠΈμ—°μ‚°μ΄λΌλŠ” 것을 λ“€μ–΄λ§Œ λ³΄μ•˜μ§€ μ‹€λ¬΄μ—μ„œλŠ” μ“Έ 일이 μ μ—ˆλŠ”λ°, 이번 κΈ°νšŒμ— μ œλŒ€λ‘œ μ•Œκ²Œ λ˜μ—ˆλ‹€. 기쑴의 10진법 수λ₯Ό κ·Έλƒ₯ |λ₯Ό μ΄μš©ν•΄ λΉ„νŠΈμ—°μ‚°ν•˜λ©΄ λœλ‹€.

첫 예제의 arr1κ³Ό arr2의 0번 인덱슀λ₯Ό κΈ°μ€€μœΌλ‘œ λΉ„νŠΈμ—°μ‚°μ„ 해보면,

// javascript

9 |
  30(
    // 31
    31,
  ).toString(2); // 11111

μœ„μ™€ 같은 κ²°κ³Όλ₯Ό 얻을 수 μžˆλ‹€ 이λ₯Ό μ΄μš©ν•˜λ©΄ λœλ‹€.

// javascript

function solution(n, arr1, arr2) {
  var answer = arr1.map((item, index) => {
    var bitOr = item | arr2[index];
    var binary = bitOr.toString(2);

    return binary.replace(/1/g, "#").replace(/0/g, " ");
  });
  return answer;
}

μœ„μ™€ 같이 ν’€λ©΄ 예제1은 ν†΅κ³Όμ΄λ‚˜ 예제2μ—μ„œ ν†΅κ³Όν•˜μ§€ λͺ»ν–ˆλ‹€. μ΄μœ λŠ” μˆ«μžμ—°μ‚°μ„ ν•˜λ‹€λ³΄λ‹ˆ μ•žμžλ¦¬μˆ˜μ— 0이 였게되면 κ·Έ μˆ˜λŠ” μ£Όμ–΄μ§„ nκ³Ό μžλ¦Ώμˆ˜κ°€ μ•ˆλ§žκ²Œ λ˜μ„œ λ¬Έμžμ—΄μ΄ μžλ¦Ώμˆ˜μ— 맞게 μΉ˜ν™˜λ˜μ§€ μ•ŠλŠ” λ¬Έμ œμ˜€λ‹€. SQL의 LPAD와 같은 κΈ°λŠ₯을 ν•˜λ‚˜ 더 λ„£μ–΄μ€€ λ’€ 톡과할 수 μžˆμ—ˆλ‹€.

μ΅œμ’…

// javascript

function solution(n, arr1, arr2) {
  var answer = arr1.map((item, index) => {
    var bitOr = item | arr2[index];
    var binary = bitOr.toString(2);

    if (binary.length < n) {
      binary = "0".repeat(n - binary.length) + binary;
    }

    return binary.replace(/1/g, "#").replace(/0/g, " ");
  });
  return answer;
}