4 min read

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

Table of Contents

2018 KAKAO BLIND RECRUITMENT의 [1μ°¨] λ‹€νŠΈκ²Œμž„ 문제 풀이

문제

문제 열어보기

μΉ΄μΉ΄μ˜€ν†‘ κ²Œμž„λ³„μ˜ ν•˜λ°˜κΈ° μ‹ κ·œ μ„œλΉ„μŠ€λ‘œ λ‹€νŠΈ κ²Œμž„μ„ μΆœμ‹œν•˜κΈ°λ‘œ ν–ˆλ‹€. λ‹€νŠΈ κ²Œμž„μ€ λ‹€νŠΈνŒμ— λ‹€νŠΈλ₯Ό μ„Έ μ°¨λ‘€ 던져 κ·Έ 점수의 ν•©κ³„λ‘œ μ‹€λ ₯을 κ²¨λ£¨λŠ” κ²Œμž„μœΌλ‘œ, λͺ¨λ‘κ°€ κ°„λ‹¨νžˆ 즐길 수 μžˆλ‹€.
κ°“ μž…μ‚¬ν•œ λ¬΄μ§€λŠ” μ½”λ”© μ‹€λ ₯을 인정받아 κ²Œμž„μ˜ 핡심 뢀뢄인 점수 계산 λ‘œμ§μ„ 맑게 λ˜μ—ˆλ‹€. λ‹€νŠΈ κ²Œμž„μ˜ 점수 계산 λ‘œμ§μ€ μ•„λž˜μ™€ κ°™λ‹€.

  1. λ‹€νŠΈ κ²Œμž„μ€ 총 3번의 기회둜 κ΅¬μ„±λœλ‹€.
  2. 각 κΈ°νšŒλ§ˆλ‹€ 얻을 수 μžˆλŠ” μ μˆ˜λŠ” 0μ μ—μ„œ 10μ κΉŒμ§€μ΄λ‹€.
  3. μ μˆ˜μ™€ ν•¨κ»˜ Single(S), Double(D), Triple(T) μ˜μ—­μ΄ μ‘΄μž¬ν•˜κ³  각 μ˜μ—­ 당첨 μ‹œ μ μˆ˜μ—μ„œ 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으둜 κ³„μ‚°λœλ‹€.
  4. μ˜΅μ…˜μœΌλ‘œ μŠ€νƒ€μƒ(*) , 아차상(#)이 μ‘΄μž¬ν•˜λ©° μŠ€νƒ€μƒ(*) 당첨 μ‹œ ν•΄λ‹Ή μ μˆ˜μ™€ λ°”λ‘œ 전에 얻은 점수λ₯Ό 각 2배둜 λ§Œλ“ λ‹€. 아차상(#) 당첨 μ‹œ ν•΄λ‹Ή μ μˆ˜λŠ” λ§ˆμ΄λ„ˆμŠ€λœλ‹€.
  5. μŠ€νƒ€μƒ(*)은 첫 번째 κΈ°νšŒμ—μ„œλ„ λ‚˜μ˜¬ 수 μžˆλ‹€. 이 경우 첫 번째 μŠ€νƒ€μƒ(*)의 점수만 2λ°°κ°€ λœλ‹€. (예제 4번 μ°Έκ³ )
  6. μŠ€νƒ€μƒ(*)의 νš¨κ³ΌλŠ” λ‹€λ₯Έ μŠ€νƒ€μƒ(*)의 νš¨κ³Όμ™€ 쀑첩될 수 μžˆλ‹€. 이 경우 μ€‘μ²©λœ μŠ€νƒ€μƒ(*) μ μˆ˜λŠ” 4λ°°κ°€ λœλ‹€. (예제 4번 μ°Έκ³ )
  7. μŠ€νƒ€μƒ(*)의 νš¨κ³ΌλŠ” 아차상(#)의 νš¨κ³Όμ™€ 쀑첩될 수 μžˆλ‹€. 이 경우 μ€‘μ²©λœ 아차상(#)의 μ μˆ˜λŠ” -2λ°°κ°€ λœλ‹€. (예제 5번 μ°Έκ³ )
  8. Single(S), Double(D), Triple(T)은 μ μˆ˜λ§ˆλ‹€ ν•˜λ‚˜μ”© μ‘΄μž¬ν•œλ‹€.
  9. μŠ€νƒ€μƒ(*), 아차상(#)은 μ μˆ˜λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•  수 있으며, μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€.

0~10의 μ •μˆ˜μ™€ 문자 S, D, T, *, #둜 κ΅¬μ„±λœ λ¬Έμžμ—΄μ΄ μž…λ ₯될 μ‹œ 총점수λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜λΌ.

μž…λ ₯ ν˜•μ‹

β€œμ μˆ˜|λ³΄λ„ˆμŠ€|[μ˜΅μ…˜]β€œμœΌλ‘œ 이루어진 λ¬Έμžμ—΄ 3μ„ΈνŠΈ.
예) 1S2D*3T

  • μ μˆ˜λŠ” 0μ—μ„œ 10 μ‚¬μ΄μ˜ μ •μˆ˜μ΄λ‹€.
  • λ³΄λ„ˆμŠ€λŠ” S, D, T 쀑 ν•˜λ‚˜μ΄λ‹€.
  • μ˜΅μ„ μ€ *μ΄λ‚˜ # 쀑 ν•˜λ‚˜μ΄λ©°, 없을 μˆ˜λ„ μžˆλ‹€.

좜λ ₯ ν˜•μ‹

3번의 κΈ°νšŒμ—μ„œ 얻은 점수 합계에 ν•΄λ‹Ήν•˜λŠ” μ •μˆ˜κ°’μ„ 좜λ ₯ν•œλ‹€.
예) 37

μž…μΆœλ ₯ 예제

예제dartResultanswerμ„€λͺ…
11S2D*3T 3711 _ 2 + 22 _ 2 + 33
21D2S#10S9 12 + 21 * (-1) + 101
31D2S0T3 12 + 21 + 03
41S*2T*3S23 11 _ 2 _ 2 + 23 * 2 + 31
51D#2S*3S5 12 _ (-1) _ 2 + 21 * 2 + 31
61T2D3D#-4 13 + 22 + 32 * (-1)
71D2S3T*59 12 + 21 _ 2 + 33 _ 2

카카였 곡식 ν•΄μ„€ λ³΄λŸ¬κ°€κΈ°


풀이

문제λ₯Ό 보고 μˆœμ„œλŒ€λ‘œ μˆ˜μ‹ 쑰건을 μ΄μš©ν•΄ ν’€λ©΄ λœλ‹€. 카카였 곡식 해섀을 보면 λ¬Έμžμ—΄μ„ ν•˜λ‚˜μ”© λŠμ–΄μ„œ ν‘ΈλŠ” κ²½μš°κ°€ 있고, μ •κ·œμ‹μ„ μ΄μš©ν•΄ ν‘ΈλŠ” κ²½μš°κ°€ μžˆλŠ” 것 같은데, μ†”μ§νžˆ μ •κ·œμ‹μ„ μ œλŒ€λ‘œ κ³΅λΆ€ν•΄λ³΄κ±°λ‚˜ μ•Œμ§€ λͺ»ν•΄μ„œ ν•œ κΈ€μžμ”© λŠμ–΄μ„œ ν’€μ–΄λ³΄μ•˜λ‹€.

// javascript

function solution(dartResult) {
  var result = Array(3).fill("");
  var index = 0;

  dartResult.split("").forEach((char) => {
    if (isNaN(char)) {
      if (result[index]) {
        index++;
      }

      switch (char) {
        case "S":
          result[index - 1] = result[index - 1] ** 1;
          break;
        case "D":
          result[index - 1] = result[index - 1] ** 2;
          break;
        case "T":
          result[index - 1] = result[index - 1] ** 3;
          break;
        case "*":
          result[index - 2] *= 2;
          result[index - 1] *= 2;
          break;
        case "#":
          result[index - 1] *= -1;
          break;
      }
    } else {
      result[index] += char;
    }
  });

  return result.reduce((a, c) => a + c);
}

μˆ«μžκ°€ 1~10 κΉŒμ§€μ΄λ―€λ‘œ 10일경우 ν•œ κΈ€μžμ”© λŠμ—ˆμ„ 땐 두 κΈ€μžκ°€ 될 μˆ˜λ„ μžˆμœΌλ‹ˆ κ·Έ 점을 μœ μ˜ν•˜μ—¬, 숫자인 κ²½μš°μ™€ μ•„λ‹Œ 경우, 그리고 각 λ¬Έμžλ³„ μˆ˜μ‹μ„ 적용 ν•΄κ²°ν•΄λ³΄μ•˜λ‹€. ν’€κΈ° μ „μ—λŠ” μ–΄λ €μ› μ§€λ§Œ 막상 풀어놓고 λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ 풀이λ₯Ό λ³΄λ‹ˆ μ •κ·œμ‹μ„ μ΄μš©ν•˜λ©΄ ν™•μ‹€νžˆ 훨씬 κ°„λ‹¨ν•˜κ²Œ ν’€ 수 μžˆλ‹€λŠ” 점이 λ³΄μ˜€λ‹€.