λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🐺 맀일 μ•Œκ³ λ¦¬μ¦˜

2018 카카였 μ½”λ”©ν…ŒμŠ€νŠΈ 1μ°¨ λ‹€νŠΈ κ²Œμž„ JS λ¬Έμ œν’€μ΄

πŸ”—μ§μ ‘ 문제 ν’€λŸ¬κ°€κΈ°

 

 

문제

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

 

예제 μž…λ ₯κ°’ 좜λ ₯κ°’ μ„€λͺ…
1 1S2D*3T 37 11 * 2 + 22 * 2 + 33
2 1D2S#10S 9 12 + 21 * (-1) + 101
3 1D2S0T 3 12 + 21 + 03
4 1S*2T*3S 23 11 * 2 * 2 + 23 * 2 + 31
5 1D#2S*3S 5 12 * (-1) * 2 + 21 * 2 + 31
6 1T2D3D# -4 13 + 22 + 32 * (-1)
7 1D2S3T* 59 12 + 21 * 2 + 33

 

지문 5 - 6 λ²ˆμ€ μž…λ ₯κ°’ 3D*1S2T처럼 μŠ€νƒ€μƒμ΄ 맨 처음 μ μˆ˜μ— μ£Όμ–΄μ‘Œμ„λ•ŒλŠ” 첫 μ μˆ˜μ—λ§Œ 적용되고 1D#2S*3Sλ‚˜ 1D2S3T*같이 λ‘λ²ˆμ§Έλ‚˜ μ„Έλ²ˆμ§Έ μ μˆ˜μ— μ μš©λ˜μ—ˆμ„ λ•ŒλŠ” 직전에 얻은 μ μˆ˜μ—λ„ μ μš©λœλ‹€λŠ” λœ»μ΄λ‹€.

 

 

 

λ¬Έμ œν’€μ΄

 

λ’€μ—μ„œλΆ€ν„° ν•œ κΈ€μžμ”© μ ‘κ·Όν•˜μ—¬ ν‚€μ›Œλ“œμΈ S D T * # 이면 μ €μž₯해두고 μˆ«μžλ©΄ μ €μž₯ν•΄λ‘” 연산을 μˆ˜ν–‰ν•˜μ—¬ 점수λ₯Ό κ³„μ‚°ν•˜λŠ” μ½”λ“œμ΄λ‹€.

  • * 의 경우 이전 μ μˆ˜μ—λ„ 영ν–₯을 μ£ΌκΈ°λ•Œλ¬Έμ— prizeλ₯Ό μ—°μ‚°ν•˜κΈ° μœ„ν•΄ λ°°μ—΄ λ‘κ°œλ₯Ό λ°°μ—΄ prize에 μ €μž₯ν•΄λ†“μ•˜λ‹€.
  • prizeλŠ” 큐처럼 μ‚¬μš©λ˜λ©° 연산이 λλ‚˜λ©΄ 0번 μΈλ±μŠ€μ— μœ„μΉ˜ν•œ 배열을 λΉΌλ‚΄κ³  μƒˆλ‘œμš΄ 배열을 맨 끝에 μ‚½μž…ν•œλ‹€.

μ‹œκ°„λ³΅μž‘λ„: O(n)

κ³΅κ°„λ³΅μž‘λ„: O(n)

 

 

 

μ •κ·œν‘œν˜„μ‹μ„ ν™œμš©ν•΄ score와 ν‚€μ›Œλ“œλ¬Έμžμ—΄μ„ λΆ„λ¦¬ν•œ ν›„ 순차적으둜 μ—°μ‚°ν•˜λŠ” μ½”λ“œ.

  • λ°°μ—΄ scores에 3가지 점수λ₯Ό μ €μž₯해두고, λ°°μ—΄ bonus에 ν‚€μ›Œλ“œ λ¬Έμžλ“€μ„ μ €μž₯ν•΄λ‘”λ‹€.
  • 문자(S,D,T)λŠ” 각 νšŒμ°¨μ— ν•œκ°œ μ”©λ§Œ 갖을 수 μžˆμœΌλ―€λ‘œ 이λ₯Ό κΈ°μ€€μœΌλ‘œ λͺ‡νšŒμ°¨ 점수λ₯Ό 계산할지 κ²°μ •ν•œλ‹€.
  • prize *을 계산할 λ•Œ 이전 νšŒμ°¨κ°€ μ‘΄μž¬ν•œλ‹€λ©΄ μ΄μ „νšŒμ°¨μ—λ„ μ μš©ν•œλ‹€. scores[idx - 1] *= 2

μ‹œκ°„λ³΅μž‘λ„: O(n)

κ³΅κ°„λ³΅μž‘λ„: O(n)