Skip to content

[๐Ÿš€ ์‚ฌ์ดํด1 - ๋ฏธ์…˜ (๋ณด๋“œ ์ดˆ๊ธฐํ™” + ๊ธฐ๋ฌผ ์ด๋™)] ๋ฐ”๋‹ˆ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#257

Open
frombunny wants to merge 58 commits intowoowacourse:frombunnyfrom
frombunny:step1

Conversation

@frombunny
Copy link
Copy Markdown

์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฒ ๋ฃจ์Šค! ๋งŒ๋‚˜๋ต™๊ฒŒ ๋˜์–ด ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค.
์ €๋Š” ์ด๋ฒˆ ์žฅ๊ธฐ ๋ฏธ์…˜ ๋ฆฌ๋ทฐ๋ฅผ ์š”์ฒญ๋“œ๋ฆฌ๊ฒŒ ๋œ ๋ฐ”๋‹ˆ์ž…๋‹ˆ๋‹ค๐Ÿฐ
์‚ฌ์ „์— DM์„ ํ†ตํ•ด ๋ง์”€๋“œ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์€ ํ›„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋งŽ์•„์งˆ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ธด ํ›„, ์ฝ”๋“œ ๋ฐ ์„ค๊ณ„์— ๋Œ€ํ•œ ์งˆ๋ฌธ๋„ ๋” ์ถ”๊ฐ€๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹คใ… ใ… 
์ถ”๊ฐ€์ ์œผ๋กœ, ํ˜„์žฌ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๊ฐ€ ๋ฏธํกํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ ์ผ€์ด์Šค๋Š” ๋Œ€๋ถ€๋ถ„ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค๐Ÿฅฒ
์ด ๋ถ€๋ถ„์€ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜๊ณผ ํ•จ๊ป˜ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ๋ณด๊ฐ•ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์‹œ๊ฐ„ ๋‚ด์–ด ๋ฆฌ๋ทฐํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ™‡โ€โ™‚๏ธ

์ฒดํฌ ๋ฆฌ์ŠคํŠธ

  • ๋ฏธ์…˜์˜ ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ๋‚˜์š”?
  • Gradle test๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผํ–ˆ๋‚˜์š”?
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋‚˜์š”?

์–ด๋–ค ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•˜์—ฌ ๋ฆฌ๋ทฐํ•ด์•ผ ํ• ๊นŒ์š”?

1. Board์™€ Piece์˜ ์ฑ…์ž„์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„์–ด์•ผ ํ•˜๋Š”์ง€๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ณ ๋ฏผ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ตฌํ˜„์—์„œ๋Š” ๊ธฐ๋ฌผ ์ด๋™์„ ๊ฒ€์ฆํ•  ๋•Œ Board์™€ Piece๊ฐ€ ํ•œ ๋ฒˆ ๋” ์™•๋ณตํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  1. ๋จผ์ € Piece๊ฐ€ ๋‹ค๋ฅธ ๊ธฐ๋ฌผ์˜ ์กด์žฌ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ , ์ž์‹ ์˜ ์ด๋™ ๊ทœ์น™๋งŒ์œผ๋กœ ํ•ด๋‹น ์œ„์น˜๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ทธ๋‹ค์Œ Board๊ฐ€ ์‹ค์ œ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•ด์„œ, ์ค‘๊ฐ„์— ์–ด๋–ค ๊ธฐ๋ฌผ์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.
  3. ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ทธ ์ •๋ณด๋ฅผ ๋‹ค์‹œ Piece์—๊ฒŒ ์ „๋‹ฌํ•ด์„œ, ์ตœ์ข…์ ์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•œ์ง€ ํŒ๋‹จํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์ €๋„ ์ด๋ ‡๊ฒŒ ๋‘ ๋ฒˆ ์™”๋‹ค ๊ฐ”๋‹ค ํ•  ์ˆ˜ ๋ฐ–์— ์—†์„๊นŒ?๋ผ๋Š” ์ƒ๊ฐ์„ ๊ณ„์† ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋” ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด Piece๊ฐ€ ๋ณด๋“œ์˜ ์ƒํƒœ๋ฅผ ๋” ๋งŽ์ด ์•Œ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ €๋Š” Piece๊ฐ€ Board์˜ ์ „์ฒด ์ƒํƒœ๋‚˜ Map<Position, Piece> ๊ฐ™์€ ์ •๋ณด๋ฅผ ์ง์ ‘ ์•„๋Š” ๊ฒƒ์€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ฌผ์€ ์Šค์Šค๋กœ ์–ด๋–ป๊ฒŒ ์›€์ง์ด๋Š”๊ฐ€์— ์ง‘์ค‘ํ•˜๊ณ , ๋ณด๋“œ๋Š” ํ˜„์žฌ ์–ด๋–ค ๊ธฐ๋ฌผ์ด ์–ด๋””์— ๋†“์—ฌ ์žˆ๋Š”๊ฐ€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ชฝ์ด ๋” ์ž์—ฐ์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋‹ค์†Œ ์™•๋ณต์ด ์ƒ๊ธฐ๋”๋ผ๋„, ๊ฐ ๊ฐ์ฒด๊ฐ€ ์•Œ์•„์•ผ ํ•  ์ •๋ณด์˜ ๋ฒ”์œ„๋ฅผ ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋„“ํžˆ์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์„ ์šฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
์™„์ „ํžˆ ํ™•์‹ ์ด ์žˆ์–ด์„œ ์„ ํƒํ•œ ๊ตฌ์กฐ๋ผ๊ธฐ๋ณด๋‹ค๋Š”, ์ œ๊ฐ€ ํ˜„์žฌ ๊ธฐ์ค€์—์„œ ๊ฐ€์žฅ ๋œ ์–ด์ƒ‰ํ•˜๋‹ค๊ณ  ๋А๋‚€ ์„ ํƒ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

์ด ๋ถ€๋ถ„์—์„œ๋Š” ์ œ๊ฐ€ ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋‚ด๋ฆฐ ํŒ๋‹จ์ด ์‹ค์ œ๋กœ๋„ ํƒ€๋‹นํ•œ์ง€, ํ˜น์€ ์˜คํžˆ๋ ค ์ฑ…์ž„์ด ์• ๋งคํ•˜๊ฒŒ ์„ž์ธ ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋Š”์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

2. ์ด๋™ ๊ฒ€์ฆ ํ๋ฆ„์„ Board๊ฐ€ ์กฐ์ •ํ•˜๋Š” ํ˜„์žฌ ๊ตฌ์กฐ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์šด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ Board๋Š” ๋‹จ์ˆœํžˆ ๊ธฐ๋ฌผ ๋ฐฐ์น˜๋งŒ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ๋„˜์–ด์„œ,
์‹ค์ œ๋กœ ์ด๋™ ๊ณผ์ • ์ „์ฒด๋ฅผ ์กฐ์ •ํ•˜๋Š” ์—ญํ• ๋„ ํ•จ๊ป˜ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด move() ์•ˆ์—์„œ

  1. ์ถœ๋ฐœ ๊ธฐ๋ฌผ๊ณผ ๋„์ฐฉ ๊ธฐ๋ฌผ์„ ์กฐํšŒํ•˜๊ณ 
  2. ๊ฒฝ๋กœ ์ •๋ณด๋ฅผ ๋งŒ๋“ค๊ณ 
  3. ์ด๋™ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•œ ๋’ค
  4. ์‹ค์ œ๋กœ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ด ๊ณผ์ •์ด ์žฅ๊ธฐํŒ์ด ํ˜„์žฌ ํŒ์˜ ์ƒํƒœ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด๋™์„ ์ค‘์žฌํ•œ๋‹ค๋Š” ์ ์—์„œ ์–ด๋А ์ •๋„ ์ž์—ฐ์Šค๋Ÿฝ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋งŒ ํ•œํŽธ์œผ๋กœ๋Š” Board๊ฐ€ ์ ์  ๋งŽ์€ ํ๋ฆ„์„ ์ฅ๊ฒŒ ๋˜๋ฉด์„œ ๋น„๋Œ€ํ•ด์งˆ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ˜„์žฌ์ฒ˜๋Ÿผ Board๊ฐ€ ์ด๋™ ๊ฒ€์ฆ์˜ ํ๋ฆ„์„ ์กฐ์ •ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๊ดœ์ฐฎ์€์ง€,
์•„๋‹ˆ๋ฉด ์ง€๊ธˆ๋ณด๋‹ค ๋” ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉํ–ฅ์ด ๋‚˜์€์ง€ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

3. ์„ค๊ณ„ ๊ณผ์ •์—์„œ ๋””์ž์ธ ํŒจํ„ด์„ ์–ด๋–ป๊ฒŒ ๋ฐ”๋ผ๋ด์•ผ ํ•˜๋Š”์ง€๊ฐ€ ์—ฌ์ „ํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๋ฏธ์…˜์„ ํ•˜๋ฉด์„œ ๊ตฌํ˜„ ์ž์ฒด๋ณด๋‹ค๋„, ์ด ์ƒํ™ฉ์—์„œ ์–ด๋–ค ํŒจํ„ด์„ ๋– ์˜ฌ๋ ค์•ผ ํ•˜๋Š”๊ฐ€๊ฐ€ ๋” ์–ด๋ ต๊ฒŒ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.
์‚ฌ์‹ค ๋ธ”๋ž™์žญ ๋ฏธ์…˜์—์„œ๋„ ์ƒํƒœ ํŒจํ„ด์„ ์Šค์Šค๋กœ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—๋„ ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„ํ•˜๋ฉด์„œ Board๊ฐ€ ์ด๋™ ํ๋ฆ„์„ ์กฐ์ •ํ•˜๊ณ , ๊ธฐ๋ฌผ๋ณ„ ์ด๋™ ๊ทœ์น™์€ ๊ฐ ์ „๋žต ๋˜๋Š” ๊ธฐ๋ฌผ ์ชฝ์— ๋‘๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋‹ค ๋ณด๋‹ˆ
๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ํŠน์ • ํŒจํ„ด์˜ ํ˜•ํƒœ์™€ ๋‹ฎ์•„ ๋ณด์ธ๋‹ค๋Š” ์ƒ๊ฐ์€ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ ์ œ๊ฐ€ ๊ฐ€์žฅ ํ—ท๊ฐˆ๋ ธ๋˜ ์ง€์ ์€ ํŒจํ„ด์„ ๋จผ์ € ๋– ์˜ฌ๋ฆฌ๊ณ  ๊ฑฐ๊ธฐ์— ๋งž์ถฐ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ ์•„๋‹ˆ๋ฉด
์ฑ…์ž„๊ณผ ํ˜‘๋ ฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๊ณ , ๋‚˜์ค‘์— ๋ณด๋‹ˆ ํŒจํ„ด์ฒ˜๋Ÿผ ์„ค๋ช…๋˜๋Š”๊ฐ€์˜€์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ ์žฅ๊ธฐ ๋ฏธ์…˜์„ ๋ดค์„ ๋•Œ๋Š” Board๋ฅผ ์ค‘์žฌ์ž๋กœ ๋†“๊ณ , ๊ธฐ๋ฌผ๋ณ„ ์ด๋™ ๊ทœ์น™์€ ์ „๋žต์œผ๋กœ ๋‘๋Š” ์‹์œผ๋กœ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋ฌผ๋งˆ๋‹ค ์ด๋™ ์ „๋žต์ด ๋‹ค๋ฅด๋‹ˆ, ์ „๋žต ํŒจํ„ด์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์•„์ง ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์–ด๋–ค ํŒจํ„ด์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฐ์ด ์ž˜ ์žกํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ํŒจํ„ด์„ ์ถœ๋ฐœ์ ์œผ๋กœ ์‚ผ์•„์•ผ ํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์ฑ…์ž„ ๋ถ„๋ฆฌ์™€ ํ˜‘๋ ฅ์„ ๋จผ์ € ๊ณ ๋ฏผํ•œ ๋’ค ๊ฒฐ๊ณผ์ ์œผ๋กœ ํŒจํ„ด์ฒ˜๋Ÿผ ๋ณด์ด๋ฉด ๋˜๋Š”์ง€๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

4. ํ™•์žฅ์„ ์–ด๋А ๋ฒ”์œ„๊นŒ์ง€ ์ƒ์ƒํ•ด์•ผ ํ• ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฌ๋Ÿฌ ํ™•์žฅ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ์ƒํ•˜๊ฒŒ ๋˜์–ด ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๋“œ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜๋„ ์žˆ๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋ฌผ์ด ์ถ”๊ฐ€๋  ์ˆ˜๋„ ์žˆ๊ณ , ๊ธฐ์กด ๋ง์˜ ์ด๋™ ๊ทœ์น™์ด ๋ณ€ํ˜•๋  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฐ€๋Šฅ์„ฑ์„ ๋– ์˜ฌ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๊ตฌ์กฐ๋ฅผ ๋” ์ผ๋ฐ˜ํ™”ํ•˜๊ณ  ์‹ถ์–ด์ง€๋Š”๋ฐ,
๋™์‹œ์— ์ง€๊ธˆ ์‹œ์ ์—์„œ ๊ทธ ์ƒ์ƒ์— ๋„ˆ๋ฌด ๋งŽ์ด ๋Œ€์‘ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜คํžˆ๋ ค ์ฝ”๋“œ๊ฐ€ ๊ณผํ•˜๊ฒŒ ์ถ”์ƒํ™”๋˜๊ณ  ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์•„์ง ์ง€๊ธˆ ํ•„์š”ํ•œ ๋ณ€ํ™”์™€ ์–ธ์  ๊ฐ€ ์žˆ์„์ง€๋„ ๋ชจ๋ฅด๋Š” ๋ณ€ํ™”๋ฅผ ์–ด๋””์—์„œ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•˜๋Š” ํƒœ๋„๋Š” ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ๊ทธ ๋ฒ”์œ„๋ฅผ ๋„“๊ฒŒ ์žก์„์ˆ˜๋ก ํ˜„์žฌ ์ฝ”๋“œ์˜ ์ดํ•ด ๋น„์šฉ์ด ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋„ ํ•จ๊ป˜ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด ๋ถ€๋ถ„์—์„œ๋Š” ์ œ๊ฐ€ ํ™•์žฅ์„ ๋„ˆ๋ฌด ์ ๊ฒŒ ๋ณธ ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๋ฐ˜๋Œ€๋กœ ์•„์ง ์˜ค์ง€ ์•Š์€ ์š”๊ตฌ์‚ฌํ•ญ๊นŒ์ง€ ์ƒ์ƒํ•˜๋ฉฐ ํ”๋“ค๋ฆฌ๊ณ  ์žˆ๋Š” ๊ฒƒ์ธ์ง€๋„ ํ•จ๊ป˜ ๋ด์ฃผ์‹œ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

frombunny and others added 25 commits March 24, 2026 19:59
- Piece ๊ตฌํ˜„
- PieceType ๊ตฌํ˜„
- Board ์ƒ์„ฑ ๊ตฌํ˜„
- ์ดˆ๊ธฐ ํฌ์ง„์— ๋Œ€ํ•œ Enum ์ •์˜
- Enum์„ ๋ฐ›์•„์„œ, ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํŒฉํ† ๋ฆฌ ์ถ”๊ฐ€
- Board๋Š” ํŒฉํ† ๋ฆฌ์—์„œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์กฐ ๋ณ€๊ฒฝ
- ์›์ ์„ ์ขŒํ•˜๋‹จ์œผ๋กœ ์ˆ˜์ •
- ๋ˆ„๋ฝ๋œ ํฌ ์ดˆ๊ธฐํ™” ๋กœ์ง ์ถ”๊ฐ€
- KING -> GENERAL
- ROOK -> CHARIOT
- ADVISOR -> GUARD
- PAWN -> SOLDIER
- ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ๋กœ getPathPositions, canMove๋ฅผ ๊ฐ€์ง
- ๊ฐ๊ฐ์˜ ๊ธฐ๋ฌผ ๊ตฌํ˜„ ํด๋ž˜์Šค ์ถ”๊ฐ€
- BoardFactory ๋ณ€๊ฒฝ
- ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ณ€๊ฒฝ
- ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ Direction ๊ตฌํ˜„
- ์กธ ์›€์ง์ž„ ์ด๋™ ๊ฒฝ๋กœ ๊ตฌํ˜„
- ์‚ฌ ์›€์ง์ž„ ์ด๋™ ๊ฒฝ๋กœ ๊ตฌํ˜„
- ๊ถ ์›€์ง์ž„ ์ด๋™ ๊ฒฝ๋กœ ๊ตฌํ˜„
- ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€ ์œ„์น˜ ์ˆ˜์ •
- ๋งˆ์— ๋Œ€ํ•œ ์ด๋™ ๊ฒฝ๋กœ ๊ตฌํ˜„
- ์ƒ์— ๋Œ€ํ•œ ์ด๋™ ๊ฒฝ๋กœ ๊ตฌํ˜„
- Horse ๊ณต๋ฐฑ ์ถ”๊ฐ€
- ์ฐจ์— ๋Œ€ํ•œ ์ด๋™ ๊ฒฝ๋กœ ๊ตฌํ˜„
- ํฌ์— ๋Œ€ํ•œ ์ด๋™ ๊ฒฝ๋กœ ๊ตฌํ˜„
- ์ดˆ๋Š” ์•„๋ž˜์— ํ•œ์€ ์œ„์— ์ƒ์„ฑ
- ์กธ/๋ณ‘ ์›€์ง์ž„์„ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์ž‘์„ฑ
- Piece๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ record๋กœ ๋ณ€๊ฒฝ
- Piece์—์„œ MoveStrategy๋ฅผ ์ฃผ์ž…๋ฐ›๋„๋ก ๋ณ€๊ฒฝ
- canMove์—์„œ ์›€์ง์ผ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ
- ํฌ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์ตœ์ข… ๋ชฉ์ ์ง€์— ๋Œ€ํ•ด ๊ฐ™์€ ์ง„์˜์ธ์ง€ ๋‹ค๋ฅธ ์ง„์˜์ธ์ง€๋Š” ๋ณด๋“œ๊ฐ€ ํŒ๋‹จ
- ๋งˆ์— ๋Œ€ํ•œ ๊ธฐ๋ฌผ์˜ ์›€์ง์ž„ ์œ ํšจ์„ฑ ํ™•์ธ
- ์ƒ์— ๋Œ€ํ•œ ๊ธฐ๋ฌผ์˜ ์›€์ง์ž„ ์œ ํšจ์„ฑ ํ™•์ธ
- ํฌ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •
- ์›€์ง์ด๋Š” ๊ณณ์ด ๊ธฐ๋ฌผ์ด ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์—๋Ÿฌ ํ™•์ธ
- ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋กœ, ์›€์ง์ž„๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ทฐ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌํ˜„
- ํ˜„์žฌ ์ขŒํ‘œ, ์ด๋™ ์ขŒํ‘œ๋กœ ํ™•์ธ๋งŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์ธ
Copy link
Copy Markdown

@verus-j verus-j left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฐ”๋‹ˆ~ ๋ฆฌ๋ทฐ์–ด ๋ฒ ๋ฃจ์Šค์ž…๋‹ˆ๋‹ค.
์ด์ „์— ์ €์—๊ฒŒ ๊ณต์œ ์ฃผ์‹ ๋Œ€๋กœ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜๊ณผ ํ•จ๊ป˜ ๊ตฌ์กฐ ๋ง˜๊ป ๋ฐ”๊พธ์…”๋„ ๋ฉ๋‹ˆ๋‹ค.
ํ”ผ๋“œ๋ฐฑ์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์œ„์ฃผ๋กœ ๋‚จ๊ฒจ๋“œ๋ ธ๋Š”๋ฐ, ์ด๋ฏธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฑธ ์•Œ๊ณ  ๊ณ„์…”์„œ ์ž‘์„ฑํ•˜๊ธฐ ํŽธํ•˜์‹œ๊ฒŒ ๋ถ€์กฑํ•œ ์ผ€์ด์Šค ๋‚จ๊ฒจ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ๋ฅผ ๋ง˜๊ป ๋ฐ”๊พธ์‹ค ๋•Œ ์ถ”์ฒœ๋“œ๋ฆฌ๋Š” ๋ฐฉํ–ฅ์€ ๋ถ€์กฑํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ฐœ์„ ํ•˜๋Š”๊ฑธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฆฌ๋ทฐ ์š”์ฒญ์—๋Š” ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ์œ„์ฃผ๋กœ ํ”ผ๋“œ๋ฐฑ ๋‚จ๊ฒจ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์˜ ๋‹ต๋ณ€๋„ ๊ทธ ๋•Œ ๋‚จ๊ฒจ๋“œ๋ฆด๊ฒŒ์š”~

Comment on lines +21 to +34
public void move(Position from, Position to) {
Piece fromPiece = pieces.get(from);
Piece toPiece = pieces.get(to);
List<Position> pathPositions = fromPiece.getPathPositions(from, to);
List<Path> path = getPath(pathPositions);
fromPiece.canMove(path, toPiece);

if (toPiece != null && fromPiece.isSameTeam(toPiece)) {
throw new IllegalStateException("๊ฐ™์€ ํŒ€์˜ ๊ธฐ๋ฌผ์„ ์žก์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
}

Piece remove = pieces.remove(from);
pieces.put(to, remove);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move์™€ ์—ฐ๊ด€๋œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค~

public List<Path> getPath(List<Position> positions) {
List<Path> paths = new ArrayList<>();
for (Position position : positions) {
if (pieces.containsKey(position)) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pieces.containsKey(position)์ด false์ธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†๋Š”๋ฐ, ๋А๋‚Œ์ด positions๋Š” ํ•ญ์ƒ peices์— ์†ํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ ๊ฐ™๋„ค์š”. false์ธ ์ƒํ™ฉ์ด ์‹ค์ œ ํ”„๋กœ๋•์…˜์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ฒ€ํ† ํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”~

}

private void validateRange(int x, int y) {
if (x < MIN_RANGE || x > MAX_WIDTH_RANGE) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

x < MIN_RANGE ๊ฐ€ true์ธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค~

throw new IllegalArgumentException("์ขŒํ‘œ ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
}

if (y < MIN_RANGE || y > MIN_HEIGHT_RANGE) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

y < MIN_RANGE๊ฐ€ true์ธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค~

Comment on lines +16 to +18
if (!((dx == 0 && dy != 0) || (dx != 0 && dy == 0))) {
throw new IllegalArgumentException("ํฌ๋ฅผ ํ•ด๋‹น ์œ„์น˜๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํฌ๋ฅผ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์—†๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค~

Comment on lines +56 to +61
@Override
public void canMove(List<Path> paths, Piece to) {
if (!paths.isEmpty()) {
throw new IllegalArgumentException("์ด๋™ ๊ฒฝ๋กœ์— ๊ธฐ๋ฌผ์ด ์กด์žฌํ•˜๋ฉด ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ฐจ์˜ canMove์™€ ์—ฐ๊ด€๋œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค~
์ด์™ธ์—๋„ ChoSoldier, Elephant, General, Guard, HanSoldier, Horse์˜ canMove์™€ ์—ฐ๊ด€๋œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค~

Comment on lines +24 to +29
@Test
void ํฌ๋Š”_๊ธฐ๋ฌผ์ด_์‚ฌ์ด์—_ํ•˜๋‚˜์˜_๊ธฐ๋ฌผ์ด_์žˆ์œผ๋ฉด_์ •์ƒ์ ์œผ๋กœ_์›€์ง์ผ_์ˆ˜_์žˆ๋‹ค() {
List<Path> paths = List.of(new Path(new Position(3, 0), new Piece(PieceType.HORSE, Team.HAN, new HorseStrategy())));

assertDoesNotThrow(() -> piece.canMove(paths, new Piece(PieceType.HORSE, Team.HAN, new HorseStrategy())));
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋งŒ ์‚ดํŽด๋ด์„œ๋Š” ํฌ์˜ ์‹œ์ž‘์ ๊ณผ ๋์ ์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋„ค์š” ใ… ใ… 
(3, 0)์— ๋ง์ด ์žˆ๋‹ค๋Š”๊ฑด ์•Œ๊ฒ ์ง€๋งŒ, canMove(paths, new Piece(HORSE))์—์„œ ์‹œ์ž‘์ , ๋„์ฐฉ์ ์„ ์•Œ๊ธฐ ์–ด๋ ต๊ณ  ๊ฐ‘์ž๊ธฐ HORSE ๊ธฐ๋ฌผ์€ ์™œ ๋ฐ›์•„์•ผํ•˜๋Š”์ง€ ํŒŒ์•…์ด ์–ด๋ ต๋„ค์š”. ๊ตฌ์กฐ ๊ฐœ์„ ํ•˜์‹ค ๋•Œ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ฐ™์ด ๊ณ ๋ฏผํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”~



@Test
void ๋งˆ๋Š”_์œ„๋กœ_๋‘์นธ_์™ผ์ชฝ์œผ๋กœ_์„ธ์นธ_์›€์ง์ผ_์ˆ˜_์žˆ๋Š”_๊ฒฝ๋กœ๊ฐ€_์žˆ๋‹ค() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Elephant ํ…Œ์ŠคํŠธ์ธ๋ฐ ๋„ค์ด๋ฐ์€ ๋งˆ์™€ ์—ฐ๊ด€๋œ ํ…Œ์ŠคํŠธ์ฒ˜๋Ÿผ ์ง€์–ด์กŒ๋„ค์š”. ํ…Œ์ŠคํŠธ ๋ช… ์ˆ˜์ •ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”~

}

@Test
void ์กธ์€_์šฐ๋กœ_ํ•œ์นธ_์›€์ง์ผ_์ˆ˜_์žˆ๋Š”_๊ฒฝ๋กœ๊ฐ€_์žˆ๋‹ค() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์—ฌ๊ธฐ๋„ ์‚ฌ์™€ ์—ฐ๊ด€๋œ ํ…Œ์ŠคํŠธ์ธ๋ฐ ์กธ๋กœ ํ‘œํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค~


import static org.assertj.core.api.Assertions.assertThat;

class SoldierChoTest {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ดˆ, ํ•œ์˜ ๋ณ‘์‚ฌ ๋ชจ๋‘ ํ›„์ง„์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†๋„ค์š”~

frombunny added 21 commits April 2, 2026 15:05
@frombunny
Copy link
Copy Markdown
Author

frombunny commented Apr 2, 2026

์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฒ ๋ฃจ์Šค! ๋ฆฌ๋ทฐ ์š”์ฒญ์ด ๋Šฆ์–ด์ง„ ์  ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค..๐Ÿฅฒ
๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ณ ๋ฏผ์ด ๋งŽ์•„์ง€๋‹ค ๋ณด๋‹ˆ ๋Šฆ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋Œ์•„๋ณด๋ฉด ๋” ๋Šฆ๊ฒŒ ๋‚ธ๋‹ค๊ณ  ํ•ด์„œ ์ฝ”๋“œ๊ฐ€ ํฌ๊ฒŒ ์ข‹์•„์ง€์ง€๋Š” ์•Š์•˜์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ํ•„์š” ์ด์ƒ์œผ๋กœ ์˜ค๋ž˜ ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์•ž์œผ๋กœ ๋ฆฌ๋ทฐ ์š”์ฒญ์€ ํ•˜๋ฃจ๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..!

ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๊ด€๋ จํ•ด์„œ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์‹  ๋ถ€๋ถ„๋“ค์„ ๋ณด๋ฉด์„œ, ์กฐ๊ธˆ ๋” ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ๊ผผ๊ผผํžˆ ์งœ๋„๋ก ๋…ธ๋ ฅํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค!
๋ฐ”์˜์‹  ์™€์ค‘์—๋„ ๋ฆฌ๋ทฐํ•ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ™‡โ€โ™‚๏ธ


์ „๋žต ์„ค๊ณ„์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

๋‚˜๋ฆ„ ์ƒ์†๋ณด๋‹ค๋Š” ์กฐํ•ฉ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ํ’€์–ด๋ณด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ „๋žต์„ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด ์ฃผ์ž…ํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ณ , ๋ฐ˜๋Œ€๋กœ ๋ชจ๋“  ์ „๋žต์„ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์ „๋žต ํŒจํ„ด์„ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋А๋‚Œ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ƒ์† ๋Œ€์‹  ์กฐํ•ฉ์„ ์„ ํƒํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๊ทธ ์„ ํƒ์„ ์‹ค์ œ ์ฝ”๋“œ ๊ตฌ์กฐ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ’€์–ด๋‚ด๋Š” ๋ฐ์—๋Š” ์•„์ง ๋ถ€์กฑํ•จ์ด ์žˆ์—ˆ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ 1์ด ๋๋‚˜๊ฐ€๋Š” ์‹œ์ ์ธ๋ฐ๋„ ์Šค์Šค๋กœ์˜ ์„ค๊ณ„ ๊ธฐ์ค€์„ ๋ช…ํ™•ํžˆ ์„ธ์šฐ์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์•„ ์•„์‰ฌ์›€๊ณผ ๋‹ต๋‹ตํ•จ์ด ๋‚จ์Šต๋‹ˆ๋‹ค.


Offset ๋„์ž…์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

์‚ฌ์ดํด 1์—์„œ Offset์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ• ์ง€์— ๋Œ€ํ•ด ํŽ˜์–ด์™€ ๊นŠ์ด ์žˆ๋Š” ๋…ผ์˜๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ดใ… ๋กœ ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ๋Š” Offset์„ ๋„์ž…ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.


1. ๋ถˆํ•„์š”ํ•œ ๋ณ€ํ™˜๊ณผ ์ขŒํ‘œ ํ‘œํ˜„์˜ ์ผ๊ด€์„ฑ
Offset์„ ๋„์ž…ํ•˜๋ฉด Board์™€ Piece ์‚ฌ์ด์—์„œ
Position(์ขŒํ‘œ) โ†’ Offset(์ƒ๋Œ€ ๊ฑฐ๋ฆฌ) โ†’ Position(์ขŒํ‘œ)์œผ๋กœ ๋ณ€ํ™˜์ด ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ๊ฒฝ๋กœ ๊ฒ€์ฆ ๊ณผ์ •์—์„œ ๊ฒฐ๊ตญ ๋ณด๋“œ ์œ„์˜ ๊ธฐ๋ฌผ์„ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์‹œ Position์œผ๋กœ ๋Œ์•„์™€์•ผ ํ•˜๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ์ด๋™ ํ๋ฆ„ ์•ˆ์—์„œ ์ขŒํ‘œ ํ‘œํ˜„์ด ํ˜ผ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ชจ๋ธ์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€๊ณ , ๋„๋ฉ”์ธ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์˜คํžˆ๋ ค ๋ถ€๋‹ด์ด ๋œ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.


2. ์žฅ๊ธฐ ๊ถ์„ฑ ๋กœ์ง์˜ ํŠน์ˆ˜์„ฑ
์‚ฌ์ดํด 1์—์„œ๋Š” ๊ถ์„ฑ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์ง€๋งŒ, ์žฅ๊ธฐ์—์„œ ๋Œ€๊ฐ์„  ์ด๋™์€ ๊ถ์„ฑ์ด๋ผ๋Š” ํŠน์ • ์˜์—ญ ์•ˆ์—์„œ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

Offset๋งŒ์œผ๋กœ๋Š” โ€œ์ด ์ด๋™์ด ๊ถ์„ฑ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ๊ฒƒ์ธ์ง€โ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ตญ โ€œํ˜„์žฌ ์œ„์น˜(Position)๊ฐ€ ๊ถ์„ฑ ๋‚ด๋ถ€์ธ๊ฐ€?โ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋„๋ฉ”์ธ์˜ ์ค‘์‹ฌ์€ Position์ด ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ์ƒ๋Œ€์  ๊ฑฐ๋ฆฌ ๊ฐœ๋…์„ ์ถ”๊ฐ€๋กœ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ๊ทœ์น™์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.


3. ์„ค๊ณ„์˜ ๋ณต์žก์„ฑ ๋Œ€๋น„ ํšจ์šฉ
ํ˜„์žฌ๋Š” Position๊ณผ Direction๋งŒ์œผ๋กœ๋„ ์ด๋™ ๋ฐฉํ–ฅ๊ณผ ๊ฒฝ๋กœ๋ฅผ ์ถฉ๋ถ„ํžˆ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ–ฅํ›„ ๋ฒกํ„ฐ ์—ฐ์‚ฐ์ด ๋งค์šฐ ๋ณต์žกํ•ด์ง€๋Š” ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ผ๋ฉด, Offset์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ˜„์žฌ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ๋” ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.


Offset์€ ์ขŒํ‘œ ๊ฐ„ ์ฐจ์ด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ, ์žฅ๊ธฐ ๋„๋ฉ”์ธ์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ธ โ€œ๊ฒฝ๋กœโ€, โ€œ๊ถ์„ฑโ€, โ€œ์œ„์น˜ ์ œ์•ฝโ€์„ ์ง์ ‘์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ด๊ธฐ์—๋Š” ๋‹ค์†Œ ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
์ด์— ๋Œ€ํ•ด ๋ฒ ๋ฃจ์Šค๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘€


๋‹ค์–‘ํ•œ ์„ค๊ณ„ ์„ ํƒ์ง€ ์†์—์„œ ๊ธฐ์ค€์„ ์žก๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

ํฌ๋ฃจ๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋‹ค ๋ณด๋ฉด ๋‹ค์–‘ํ•œ ์„ค๊ณ„ ์•„์ด๋””์–ด๊ฐ€ ๋‚˜์˜ค๊ณ ,
๊ฐ๊ฐ์˜ ๋ฐฉ์‹์ด ๋ชจ๋‘ ๋‚˜๋ฆ„์˜ ํƒ€๋‹นํ•œ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ โ€œ์ด๊ฒŒ ๋” ์ข‹์€๊ฐ€?โ€, โ€œ์ €๊ฒŒ ๋” ๋งž๋Š”๊ฐ€?โ€๋ฅผ ๊ณ„์† ๋น„๊ตํ•˜๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด ๊ณผ์ •์—์„œ ์žฅ๋‹จ์ ์„ ๊ณ„์† ๋”ฐ์ ธ๋ณด๋‹ค ๋ณด๋‹ˆ, ์˜คํžˆ๋ ค ์Šค์Šค๋กœ์˜ ํŒ๋‹จ ๊ธฐ์ค€์ด ํ๋ ค์ง€๊ณ  ๊ฒฐ์ •์ด ๋Šฆ์–ด์ง€๋Š” ๊ฒฝํ—˜์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” ์—ฌ๋Ÿฌ ์˜๊ฒฌ์„ ๋“ฃ๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋˜๊ธฐ๋„ ํ–ˆ์ง€๋งŒ, ๋™์‹œ์— ์„ ํƒ์ง€๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ๋Š˜๋ ค์„œ ๋” ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์ง€๋Š” ์ˆœ๊ฐ„์ด ๋” ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” ์œ ๋‚œํžˆ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€์ง€ ๋ชปํ•˜๊ณ , ์ •์ฒด๋œ ๋А๋‚Œ์„ ๋ฐ›์•˜๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์Šค์Šค๋กœ ๊ธฐ์ค€์„ ์„ธ์šฐ๋Š” ๋Šฅ๋ ฅ์ด ์•„์ง ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ, ์Šค์Šค๋กœ์˜ ๊ธฐ์ค€์€ ์–ด๋–ป๊ฒŒ ์„ธ์šฐ๋Š” ๊ฒŒ ์ข‹์„๊นŒ์š”?

์ด๋Ÿฐ ๊ฒฝ์šฐ ๋ฒ ๋ฃจ์Šค๋Š” ๋ณดํ†ต ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์‚ฌ๊ณ ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋‹ค์Œ ์„ ํƒ์„ ๋‚ด๋ฆฌ์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค..!

Copy link
Copy Markdown

@verus-j verus-j left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

๋‚จ๊ฒจ์ฃผ์‹  ์งˆ๋ฌธ์ด ์กฐ๊ธˆ ๊ธธ์–ด์„œ ์Šฌ๋ž™์— ๋”ฐ๋กœ ๋‚ด์ผ ๋‹ต๋ณ€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


import java.util.List;

public class CannonMoveStrategy implements MoveStrategy {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋ฆฌํŒฉํ„ฐ๋งํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์—†์–ด์ง„ ๊ฒƒ ๊ฐ™๋„ค์š” ใ… ใ… 

Copy link
Copy Markdown
Author

@frombunny frombunny Apr 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํŒŒ์ผ์ด ์กด์žฌํ•ด์„œ ํ™•์ธํ•ด๋ดค๋”๋‹ˆ, CannonMoveStrategy์—์„œ ์ž˜๋ชป๋œ ๊ธฐ๋ฌผ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ์–ด์„œ ๊ทธ๋žฌ๋˜ ๊ฑฐ์˜€๊ตฐ์š”...ใ…œใ…œ ๋ฏธ๋ฆฌ ๊ผผ๊ผผํžˆ ํ™•์ธํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ •๋ง ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค...๐Ÿ˜ญ


departurePiece.validateBlockingPiece(path, destination);

if (isExistPieceAt(destination)) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

false์ธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†๋Š”๊ฑธ๋ณด๋‹ˆ ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ๊ธฐ๋ฌผ์ด ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค~

Comment on lines +49 to +51
if ((Math.abs(deltaX) == 3)) {
return Direction.decideDirection(deltaX, 0);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์กฐ๊ฑด๋ฌธ ์•ˆ์— ๋“ค์–ด์˜ค๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค~

Comment on lines +36 to +38
if (hasBlockingPiece) {
throw new IllegalArgumentException("์ด๋™ ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋‹ค๋ฅธ ๊ธฐ๋ฌผ์„ ๋›ฐ์–ด๋„˜์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hasBlockingPiece๊ฐ€ false์ธ ์ผ€์ด์Šค๊ฐ€ ์—†๋„ค์š”. ์ •์ƒ์ ์ธ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์•„์š”.

int absoluteX = Math.abs(deltaX);
int absoluteY = Math.abs(deltaY);

return (absoluteX == 2 && absoluteY == 3) || (absoluteX == 3 && absoluteY == 2);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋‹ค์–‘ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์ผ€์ด์Šค์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”~

import static org.assertj.core.api.Assertions.assertThatThrownBy;

class CannonMoveStrategyTest {
private final MoveStrategy chariotMoveStrategy = new ChariotMoveStrategy();
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ž˜๋ชป๋œ MoveStrategy๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ด ๋ถ€๋ถ„ ๊ผผ๊ผผํžˆ ํ™•์ธํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ •๋ง์ •๋ง ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค ใ…œใ…œ..
ํฌ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ๋”๋ผ๊ตฌ์š”๐Ÿฅฒ
์ด๋ฒˆ์„ ๊ณ„๊ธฐ๋กœ ์•ž์œผ๋กœ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋Š” ์‹ ๊ฒฝ์จ์„œ ๊ผผ๊ผผํžˆ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..

Comment on lines +25 to +30
@Override
public void validateBlockingPiece(List<PathInfo> pathInfos, Position destination) {
if (pathInfos.stream().anyMatch(pathInfo -> pathInfo.isPieceType(PieceType.CANNON))) {
throw new IllegalArgumentException("ํฌ๋Š” ํฌ๋ฅผ ๋„˜๊ฑฐ๋‚˜ ์žก์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํฌ์˜ ์กฐ๊ฑด ์ค‘์— ๋„˜์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฌผ ๊ฐฏ์ˆ˜์ œํ•œ์ด ๋น ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ™•์ธ๋ถ€ํƒ๋“œ๋ ค์š”~

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํฌ๊ฐ€ ํฌ๋ฅผ ๋„˜๊ฑฐ๋‚˜ ์žก๋Š” ์ œ์•ฝ์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ํฌ๊ฐ€ ๋„˜์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฌผ ๊ฐฏ์ˆ˜ ์ œ์•ฝ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค๐Ÿ˜ญ
์ด ๋ถ€๋ถ„๋„ ์ œ๊ฐ€ ๊ผผ๊ผผํžˆ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค ใ… ใ… 


public class ElephantMoveStrategy implements MoveStrategy {
@Override
public List<Position> getPath(Position departure, Position destination) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋ฉ”์„œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ ์ ˆํžˆ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”์ถœํ•ด ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ๋†’์—ฌ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”~

}

@Override
public List<Position> getPath(Position departure, Position destination) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ „๋ฐ˜์ ์œผ๋กœ MoveStrategy์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋“ค์˜ getPath ๊ตฌํ˜„ ๋กœ์ง์ด ๊ธฐ๋„ค์š”. ๋ฉ”์„œ๋“œ ์ถ”์ถœ๋กœ ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ๋†’์—ฌ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”~

import java.util.ArrayList;
import java.util.List;

public class PathGenerator {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PathGenerator๋กœ Path๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์•ผํ•˜๋Š”์ง€ ๊ณ ๋ฏผํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌ์กฐ์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์ฑ…์ž„์„ ๋งก๊ธธ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants