Skip to content

Latest commit

Β 

History

History
78 lines (67 loc) Β· 4.97 KB

step2.md

File metadata and controls

78 lines (67 loc) Β· 4.97 KB

[Step2] 볼링 점수판 (점수 계산)

κΈ°λŠ₯ μš”κ΅¬ 사항

  • μ‚¬μš©μž 1λͺ…μ˜ 볼링 κ²Œμž„ 점수λ₯Ό 관리할 수 μžˆλŠ” ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•œλ‹€.
  • 각 ν”„λ ˆμž„μ΄ 슀트라이크이면 "X", μŠ€νŽ˜μ–΄μ΄λ©΄ "9 | /", 미슀이면 "8 | 1"κ³Ό 같이 좜λ ₯ν•˜λ„λ‘ κ΅¬ν˜„ν•œλ‹€.
    • 슀트라이크(strike) : ν”„λ ˆμž„μ˜ 첫번째 νˆ¬κ΅¬μ—μ„œ λͺ¨λ“  ν•€(10개)을 μ“°λŸ¬νŠΈλ¦° μƒνƒœ
    • μŠ€νŽ˜μ–΄(spare) : ν”„λ ˆμž„μ˜ λ‘λ²ˆμž¬ νˆ¬κ΅¬μ—μ„œ λͺ¨λ“  ν•€(10개)을 μ“°λŸ¬νŠΈλ¦° μƒνƒœ
    • 미슀(miss) : ν”„λ ˆμž„μ˜ λ‘λ²ˆμž¬ νˆ¬κ΅¬μ—μ„œλ„ λͺ¨λ“  핀이 μ“°λŸ¬μ§€μ§€ μ•Šμ€ μƒνƒœ
    • κ±°ν„°(gutter) : 핀을 ν•˜λ‚˜λ„ μ“°λŸ¬νŠΈλ¦¬μ§€ λͺ»ν•œ μƒνƒœ. κ±°ν„°λŠ” "-"둜 ν‘œμ‹œ
    • μŠ€νŠΈλΌμ΄ν¬λŠ” λ‹€μŒ 2번의 νˆ¬κ΅¬κΉŒμ§€ 점수λ₯Ό ν•©μ‚°ν•΄μ•Ό ν•œλ‹€. μŠ€νŽ˜μ–΄λŠ” λ‹€μŒ 1번의 νˆ¬κ΅¬κΉŒμ§€ 점수λ₯Ό ν•©μ‚°ν•΄μ•Ό ν•œλ‹€.
  • 10 ν”„λ ˆμž„μ€ μŠ€νŠΈλΌμ΄ν¬μ΄κ±°λ‚˜ μŠ€νŽ˜μ–΄μ΄λ©΄ ν•œ λ²ˆμ„ 더 νˆ¬κ΅¬ν•  수 μžˆλ‹€.

ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬μ‚¬ν•­

  • 객체지ν–₯ 5원칙 (SOLID) 을 μ§€ν‚€λ©΄μ„œ ν”„λ‘œκ·Έλž˜λ°ν•œλ‹€.
    • SRP (λ‹¨μΌμ±…μž„μ˜ 원칙: Single Responsibility Principle)
      • μž‘μ„±λœ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ κΈ°λŠ₯만 가지며 ν΄λž˜μŠ€κ°€ μ œκ³΅ν•˜λŠ” λͺ¨λ“  μ„œλΉ„μŠ€λŠ” κ·Έ ν•˜λ‚˜μ˜ μ±…μž„(λ³€ν™”μ˜ μΆ•: axis of change)을 μˆ˜ν–‰ν•˜λŠ” 데 μ§‘μ€‘λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€
    • OCP (κ°œλ°©νμ‡„μ˜ 원칙: Open Close Principle)
      • μ†Œν”„νŠΈμ›¨μ–΄μ˜ κ΅¬μ„±μš”μ†Œ(μ»΄ν¬λ„ŒνŠΈ, 클래슀, λͺ¨λ“ˆ, ν•¨μˆ˜)λŠ” ν™•μž₯μ—λŠ” μ—΄λ €μžˆκ³ , λ³€κ²½μ—λŠ” λ‹«ν˜€μžˆμ–΄μ•Ό ν•œλ‹€.
    • LSP (λ¦¬μŠ€μ½”λΈŒ μΉ˜ν™˜μ˜ 원칙: The Liskov Substitution Principle)
      • μ„œλΈŒ νƒ€μž…μ€ μ–Έμ œλ‚˜ 기반 νƒ€μž…μœΌλ‘œ ꡐ체할 수 μžˆμ–΄μ•Ό ν•œλ‹€. 즉, μ„œλΈŒ νƒ€μž…μ€ μ–Έμ œλ‚˜ 기반 νƒ€μž…κ³Ό ν˜Έν™˜λ  수 μžˆμ–΄μ•Ό ν•œλ‹€.
    • ISP (μΈν„°νŽ˜μ΄μŠ€ λΆ„λ¦¬μ˜ 원칙: Interface Segregation Principle)
      • ν•œ ν΄λž˜μŠ€λŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ν•˜μ§€ 말아야 ν•œλ‹€.
    • DIP (μ˜μ‘΄μ„±μ—­μ „μ˜ 원칙: Dependency Inversion Principle)
      • ꡬ쑰적 λ””μžμΈμ—μ„œ λ°œμƒν•˜λ˜ ν•˜μœ„ 레벨 λͺ¨λ“ˆμ˜ 변경이 μƒμœ„ 레벨 λͺ¨λ“ˆμ˜ 변경을 μš”κ΅¬ν•˜λŠ” μœ„κ³„κ΄€κ³„λ₯Ό λŠλŠ” 의미의 μ—­μ „ 원칙이닀.

κ΅¬ν˜„ μ‹œμž‘ 방법

  • 볼링 κ²Œμž„μ˜ 점수 계산 방식 μ•„λŠ” μ‚¬λžŒμ€ λ°”λ‘œ κ΅¬ν˜„μ„ μ‹œμž‘ν•œλ‹€.
  • 점수 계산 방식을 λͺ¨λ₯΄λŠ” μ‚¬λžŒμ€ κ΅¬κΈ€μ—μ„œ "볼링 점수 계산법"κ³Ό 같은 ν‚€μ›Œλ“œλ‘œ 검색해 볼링 κ²Œμž„μ˜ 점수 계산 방식을 ν•™μŠ΅ν•œ ν›„ κ΅¬ν˜„μ„ μ‹œμž‘ν•œλ‹€.

좜λ ₯ κ²°κ³Ό

ν”Œλ ˆμ΄μ–΄ 이름은(3 english letters)?: PJS
| NAME |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  10  |
|  PJS |      |      |      |      |      |      |      |      |      |      |
|      |      |      |      |      |      |      |      |      |      |      |

1ν”„λ ˆμž„ 투ꡬ : 10
| NAME |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  10  |
|  PJS |  X   |      |      |      |      |      |      |      |      |      |
|      |      |      |      |      |      |      |      |      |      |      |

2ν”„λ ˆμž„ 투ꡬ  : 8
| NAME |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  10  |
|  PJS |  X   |  8   |      |      |      |      |      |      |      |      |
|      |      |      |      |      |      |      |      |      |      |      |

2ν”„λ ˆμž„ 투ꡬ : 2
| NAME |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  10  |
|  PJS |  X   |  8|/ |      |      |      |      |      |      |      |      |
|      |  20  |      |      |      |      |      |      |      |      |      |

3ν”„λ ˆμž„ 투ꡬ : 8
| NAME |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  10  |
|  PJS |  X   |  8|/ |   8  |      |      |      |      |      |      |      |
|      |  20  |  38  |      |      |      |      |      |      |      |      |

3ν”„λ ˆμž„ 투ꡬ : 1
| NAME |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  10  |
|  PJS |  X   |  8|/ |  8|1 |      |      |      |      |      |      |      |
|      |  20  |  38  |  47  |      |      |      |      |      |      |      |

...

힌트

  • 점수λ₯Ό κ΅¬ν•˜λŠ” 역할을 각 Frame이 λ‹΄λ‹Ήν•  수 μžˆλ„λ‘ κ΅¬ν˜„ν•΄ λ³Έλ‹€. Frame이 μžμ‹ μ˜ 점수λ₯Ό κ΅¬ν•˜λ €λ©΄ λ‹€μŒ Frame에 μ ‘κ·Όν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. Frame이 LinkedList와 같은 자료 ꡬ쑰 기반으둜 κ΅¬ν˜„ν•΄ λ³Έλ‹€.
  • Frame μ™ΈλΆ€μ—μ„œ 점수λ₯Ό 계산해 setν•˜λŠ” 것이 μ•„λ‹ˆλΌ Frame μžμ²΄κ°€ 점수λ₯Ό 계산할 수 μžˆλ„λ‘ ν•œλ‹€.
Frame frame = new Frame(frameNo);
frame.bowl(10);
frame.bowl(8);
frame.bowl(2);
int score = frame.getScore();
// scoreλŠ” 20을 λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.
  • μžλ°”μ˜ λ‹€ν˜•μ„±μ„ μ μš©ν•΄ 둜직 κ΅¬ν˜„μ—μ„œ λ°œμƒν•˜λŠ” μˆ˜λ§Žμ€ if/elseλ₯Ό μ œκ±°ν•œλ‹€.
  • κ΅¬ν˜„ 쀑 해결책을 μ°ΎκΈ° νž˜λ“  경우 볼링 점수판 3단계 - 힌트 μ—μ„œ 힌트λ₯Ό μ°Έκ³ ν•΄ κ΅¬ν˜„ν•΄ λ³Έλ‹€.
    • 단, 정말 해결책을 μ°ΎμœΌλ €λ‹€ ν¬κΈ°ν•˜κ³  싢은 상황이 됐을 λ•Œ μ°Έκ³ ν•  것을 μΆ”μ²œν•œλ‹€.