Skip to content

Files

Latest commit

 

History

History
293 lines (236 loc) ยท 12.3 KB

README.md

File metadata and controls

293 lines (236 loc) ยท 12.3 KB

๋ฏธ์…˜ - ๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ

๐Ÿ” ์ง„ํ–‰ ๋ฐฉ์‹

  • ๋ฏธ์…˜์€ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ, ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ ์„ธ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • ์„ธ ๊ฐœ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค. ํŠนํžˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ , ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ๊ธฐ์žฌ๋˜์ง€ ์•Š์€ ๋‚ด์šฉ์€ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ“ฎ ๋ฏธ์…˜ ์ œ์ถœ ๋ฐฉ๋ฒ•

  • ๋ฏธ์…˜ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ GitHub์„ ํ†ตํ•ด ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค.
  • GitHub์— ๋ฏธ์…˜์„ ์ œ์ถœํ•œ ํ›„ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค ์ง€์› ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•œ๋‹ค.
    • ์ž์„ธํ•œ ๋ฐฉ๋ฒ•์€ ์ œ์ถœ ๊ฐ€์ด๋“œ ์ฐธ๊ณ 
    • Pull Request๋งŒ ๋ณด๋‚ด๊ณ  ์ง€์› ํ”Œ๋žซํผ์—์„œ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์ œ์ถœํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค.

๐Ÿšจ ๊ณผ์ œ ์ œ์ถœ ์ „ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ - 0์  ๋ฐฉ์ง€

  • ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋ชจ๋‘ ์ •์ƒ์ ์œผ๋กœ ํ–ˆ๋”๋ผ๋„ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋ช…์‹œ๋œ ์ถœ๋ ฅ๊ฐ’ ํ˜•์‹์„ ์ง€ํ‚ค์ง€ ์•Š์„ ๊ฒฝ์šฐ 0์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ๋’ค ์•„๋ž˜ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ 0์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ, ๋ฐ˜๋“œ์‹œ ํ™•์ธ ํ›„ ์ œ์ถœํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฐ€์ด๋“œ

  • ํ„ฐ๋ฏธ๋„์—์„œ java -version์„ ์‹คํ–‰ํ•˜์—ฌ Java ๋ฒ„์ „์ด 11์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ๋˜๋Š” Eclipse ๋˜๋Š” IntelliJ IDEA์™€ ๊ฐ™์€ IDE์—์„œ Java 11๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ํ„ฐ๋ฏธ๋„์—์„œ Mac ๋˜๋Š” Linux ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ./gradlew clean test ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ ,
    Windows ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ gradlew.bat clean test ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
BUILD SUCCESSFUL in 0s

๐Ÿš€ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ

์œ„์•„๋ž˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ์นธ๋งŒ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฆฌ๋ฅผ ๋๊นŒ์ง€ ๊ฑด๋„ˆ๊ฐ€๋Š” ๊ฒŒ์ž„์ด๋‹ค.

  • ์œ„์•„๋ž˜ ๋‘ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ์•ผ ํ•œ๋‹ค.
    • ๋‹ค๋ฆฌ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฑด๋„ˆ์•ผ ํ•œ๋‹ค.
    • ์œ„์•„๋ž˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ์นธ๋งŒ ๊ฑด๋„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ์ˆซ์ž๋กœ ์ž…๋ ฅ๋ฐ›๊ณ  ์ƒ์„ฑํ•œ๋‹ค.
    • ๋‹ค๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์œ„ ์นธ๊ณผ ์•„๋ž˜ ์นธ ์ค‘ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์นธ์€ 0๊ณผ 1 ์ค‘ ๋ฌด์ž‘์œ„ ๊ฐ’์„ ์ด์šฉํ•ด์„œ ์ •ํ•œ๋‹ค.
    • ์œ„ ์นธ์„ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ U, ์•„๋ž˜ ์นธ์„ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ D๊ฐ’์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ๋ฌด์ž‘์œ„ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ ์•„๋ž˜ ์นธ, 1์ธ ๊ฒฝ์šฐ ์œ„ ์นธ์ด ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์นธ์ด ๋œ๋‹ค.
  • ๋‹ค๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•œ๋‹ค.
    • ์ด๋™ํ•  ๋•Œ ์œ„ ์นธ์€ ๋Œ€๋ฌธ์ž U, ์•„๋ž˜ ์นธ์€ ๋Œ€๋ฌธ์ž D๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
    • ์ด๋™ํ•œ ์นธ์„ ๊ฑด๋„ ์ˆ˜ ์žˆ๋‹ค๋ฉด O๋กœ ํ‘œ์‹œํ•œ๋‹ค. ๊ฑด๋„ ์ˆ˜ ์—†๋‹ค๋ฉด X๋กœ ํ‘œ์‹œํ•œ๋‹ค.
  • ๋‹ค๋ฆฌ๋ฅผ ๋๊นŒ์ง€ ๊ฑด๋„ˆ๋ฉด ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋œ๋‹ค.
  • ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋‹ค ์‹คํŒจํ•˜๋ฉด ๊ฒŒ์ž„์„ ์žฌ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์žฌ์‹œ์ž‘ํ•ด๋„ ์ฒ˜์Œ์— ๋งŒ๋“  ๋‹ค๋ฆฌ๋กœ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ฒŒ์ž„ ๊ฒฐ๊ณผ์˜ ์ด ์‹œ๋„ํ•œ ํšŸ์ˆ˜๋Š” ์ฒซ ์‹œ๋„๋ฅผ ํฌํ•จํ•ด ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์‹œ๋„ํ•œ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ IllegalArgumentException๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ ํ›„ ๊ทธ ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋‹ค์‹œ ๋ฐ›๋Š”๋‹ค.
    • Exception์ด ์•„๋‹Œ IllegalArgumentException, IllegalStateException ๋“ฑ๊ณผ ๊ฐ™์€ ๋ช…ํ™•ํ•œ ์œ ํ˜•์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์š”๊ตฌ ์‚ฌํ•ญ

์ž…๋ ฅ

  • ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ๋‹ค๋ฆฌ ๊ธธ์ด๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. 3 ์ด์ƒ 20 ์ดํ•˜์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•œ๋‹ค.
3
  • ๋ผ์šด๋“œ๋งˆ๋‹ค ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๋™ํ•  ์นธ์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. U(์œ„ ์นธ)์™€ D(์•„๋ž˜ ์นธ) ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•œ๋‹ค.
U
  • ๊ฒŒ์ž„ ์žฌ์‹œ์ž‘/์ข…๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. R(์žฌ์‹œ์ž‘)๊ณผ Q(์ข…๋ฃŒ) ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•œ๋‹ค.
R

์ถœ๋ ฅ

  • ๊ฒŒ์ž„ ์‹œ์ž‘ ๋ฌธ๊ตฌ
๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒŒ์ž„ ์ข…๋ฃŒ ๋ฌธ๊ตฌ
์ตœ์ข… ๊ฒŒ์ž„ ๊ฒฐ๊ณผ
[ O |   |   ]
[   | O | O ]

๊ฒŒ์ž„ ์„ฑ๊ณต ์—ฌ๋ถ€: ์„ฑ๊ณต
์ด ์‹œ๋„ํ•œ ํšŸ์ˆ˜: 2
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๊ฒฐ๊ณผ์˜ ์ถœ๋ ฅ ํ˜•์‹์€ ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.
    • ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ O ํ‘œ์‹œ
    • ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์นธ์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ X ํ‘œ์‹œ
    • ์„ ํƒํ•˜์ง€ ์•Š์€ ์นธ์€ ๊ณต๋ฐฑ ํ•œ ์นธ์œผ๋กœ ํ‘œ์‹œ
    • ๋‹ค๋ฆฌ์˜ ์‹œ์ž‘์€ [, ๋‹ค๋ฆฌ์˜ ๋์€ ]์œผ๋กœ ํ‘œ์‹œ
    • ๋‹ค๋ฆฌ ์นธ์˜ ๊ตฌ๋ถ„์€ |(์•ž๋’ค ๊ณต๋ฐฑ ํฌํ•จ) ๋ฌธ์ž์—ด๋กœ ๊ตฌ๋ถ„
    • ํ˜„์žฌ๊นŒ์ง€ ๊ฑด๋„Œ ๋‹ค๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅ
  • ์˜ˆ์™ธ ์ƒํ™ฉ ์‹œ ์—๋Ÿฌ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, ์—๋Ÿฌ ๋ฌธ๊ตฌ๋Š” "[ERROR]"๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
[ERROR] ๋‹ค๋ฆฌ ๊ธธ์ด๋Š” 3๋ถ€ํ„ฐ 20 ์‚ฌ์ด์˜ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
3

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O ]
[   ]

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O | X ]
[   |   ]

๊ฒŒ์ž„์„ ๋‹ค์‹œ ์‹œ๋„ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์žฌ์‹œ๋„: R, ์ข…๋ฃŒ: Q)
R
์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O ]
[   ]

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
D
[ O |   ]
[   | O ]

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
D
[ O |   |   ]
[   | O | O ]

์ตœ์ข… ๊ฒŒ์ž„ ๊ฒฐ๊ณผ
[ O |   |   ]
[   | O | O ]

๊ฒŒ์ž„ ์„ฑ๊ณต ์—ฌ๋ถ€: ์„ฑ๊ณต
์ด ์‹œ๋„ํ•œ ํšŸ์ˆ˜: 2
๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
3

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O ]
[   ]

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O | X ]
[   |   ]

๊ฒŒ์ž„์„ ๋‹ค์‹œ ์‹œ๋„ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์žฌ์‹œ๋„: R, ์ข…๋ฃŒ: Q)
Q
์ตœ์ข… ๊ฒŒ์ž„ ๊ฒฐ๊ณผ
[ O | X ]
[   |   ]

๊ฒŒ์ž„ ์„ฑ๊ณต ์—ฌ๋ถ€: ์‹คํŒจ
์ด ์‹œ๋„ํ•œ ํšŸ์ˆ˜: 1

๐ŸŽฏ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ

  • JDK 11 ๋ฒ„์ „์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. JDK 11์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ 0์  ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ์‹œ์ž‘์ ์€ Application์˜ main()์ด๋‹ค.
  • build.gradle ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Java ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ๊ฐ€์ด๋“œ๋ฅผ ์ค€์ˆ˜ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ System.exit()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด ApplicationTest์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ 0์  ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์—์„œ ๋‹ฌ๋ฆฌ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ํŒŒ์ผ, ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ 3์ด ๋„˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. 2๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด while๋ฌธ ์•ˆ์— if๋ฌธ์ด ์žˆ์œผ๋ฉด ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 2์ด๋‹ค.
    • ํžŒํŠธ: indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ ์ค„์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.
  • 3ํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
  • ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๋„๋ก ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ผ.
  • JUnit 5์™€ AssertJ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณธ์ธ์ด ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ์ •์ƒ ๋™์ž‘ํ•จ์„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ํ™•์ธํ•œ๋‹ค.
  • else ์˜ˆ์•ฝ์–ด๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
    • ํžŒํŠธ: if ์กฐ๊ฑด์ ˆ์—์„œ ๊ฐ’์„ return ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด else๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
    • else๋ฅผ ์“ฐ์ง€ ๋ง๋ผ๊ณ  ํ•˜๋‹ˆ switch/case๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ switch/case๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋„๋ฉ”์ธ ๋กœ์ง์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, UI(System.out, System.in, Scanner) ๋กœ์ง์€ ์ œ์™ธํ•œ๋‹ค.
    • ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ์™€ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

์ถ”๊ฐ€๋œ ์š”๊ตฌ ์‚ฌํ•ญ

  • ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)์˜ ๊ธธ์ด๊ฐ€ 10๋ผ์ธ์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.
    • ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ž˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.
  • ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค.
  • ์•„๋ž˜ ์žˆ๋Š” InputView, OutputView, BridgeGame, BridgeMaker, BridgeRandomNumberGenerator ํด๋ž˜์Šค์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ๊ฐ ํด๋ž˜์Šค์˜ ์ œ์•ฝ ์‚ฌํ•ญ์€ ์•„๋ž˜ ํด๋ž˜์Šค๋ณ„ ์„ธ๋ถ€ ์„ค๋ช…์„ ์ฐธ๊ณ ํ•œ๋‹ค.
    • ์ด์™ธ ํ•„์š”ํ•œ ํด๋ž˜์Šค(๋˜๋Š” ๊ฐ์ฒด)์™€ ๋ฉ”์„œ๋“œ๋Š” ์ž์œ ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • InputView ํด๋ž˜์Šค์—์„œ๋งŒ camp.nextstep.edu.missionutils.Console ์˜ readLine() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • BridgeGame ํด๋ž˜์Šค์—์„œ InputView, OutputView ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

InputView ํด๋ž˜์Šค

  • ์ œ๊ณต๋œ InputView ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • InputView์˜ ํŒจํ‚ค์ง€๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • InputView์˜ ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜(์ธ์ž, ์ด๋ฆ„)์™€ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ฐ’ ์ž…๋ ฅ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
public class InputView {

    public int readBridgeSize() {
        return 0;
    }

    public String readMoving() {
        return null;
    }

    public String readGameCommand() {
        return null;
    }
}

OutputView ํด๋ž˜์Šค

  • ์ œ๊ณต๋œ OutputView ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • OutputView์˜ ํŒจํ‚ค์ง€๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • OutputView์˜ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ์ธ์ž์™€ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ’ ์ถœ๋ ฅ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
public class OutputView {

    public void printMap() {
    }

    public void printResult() {
    }
}

BridgeGame ํด๋ž˜์Šค

  • ์ œ๊ณต๋œ BridgeGame ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • BridgeGame์— ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • BridgeGame์˜ ํŒจํ‚ค์ง€๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • BridgeGame์˜ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ์ธ์ž์™€ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฒŒ์ž„ ์ง„ํ–‰์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
public class BridgeGame {

    public void move() {
    }

    public void retry() {
    }
}

BridgeMaker ํด๋ž˜์Šค

  • ์ œ๊ณต๋œ BridgeMaker ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • BridgeMaker์˜ ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
  • BridgeMaker์˜ ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜(์ธ์ž, ์ด๋ฆ„)์™€ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
public class BridgeMaker {

    public List<String> makeBridge(int size) {
        return null;
    }
}

BridgeRandomNumberGenerator ํด๋ž˜์Šค

  • Random ๊ฐ’ ์ถ”์ถœ์€ ์ œ๊ณต๋œ bridge.BridgeRandomNumberGenerator์˜ generate()๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
  • BridgeRandomNumberGenerator, BridgeNumberGenerator ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

์‚ฌ์šฉ ์˜ˆ์‹œ

  • ๋‹ค๋ฆฌ ์นธ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ Random ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”์ถœํ•œ๋‹ค.
int number = bridgeNumberGenerator.generate();

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • camp.nextstep.edu.missionutils์—์„œ ์ œ๊ณตํ•˜๋Š” Console API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์€ camp.nextstep.edu.missionutils.Console์˜ readLine()์„ ํ™œ์šฉํ•œ๋‹ค.

โœ๏ธ ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ

  • ๋ฏธ์…˜์€ java-bridge ์ €์žฅ์†Œ๋ฅผ Fork & Cloneํ•ด ์‹œ์ž‘ํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „ docs/README.md์— ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค.
  • Git์˜ ์ปค๋ฐ‹ ๋‹จ์œ„๋Š” ์•ž ๋‹จ๊ณ„์—์„œ docs/README.md์— ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก ๋‹จ์œ„๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๊ณผ์ œ ์ง„ํ–‰ ๋ฐ ์ œ์ถœ ๋ฐฉ๋ฒ•์€ ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.