์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

ChromaOracle ํผ์ฆ ์†”๋ฒ„ ์ž‘๋™ ์›๋ฆฌ:BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…

ChromaOracle์€ BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ์ปฌ๋Ÿฌ ์†ŒํŠธ ํผ์ฆ์˜ ๊ฐ€์žฅ ์งง์€ ๊ฐ€๋Šฅ ํ•ด๋„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์†”๋ฒ„๋Š” ์ถ”์ธกํ•˜๊ฑฐ๋‚˜ ํœด๋ฆฌ์Šคํ‹ฑ์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ , ๊ฐ€์žฅ ์งง์€ ์‹œํ€€์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ˆ˜์˜ ์‹œํ€€์Šค๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋‹ค๊ฐ€ ํผ์ฆ์„ ํ‘ธ๋Š” ๊ฒƒ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ˜ํ™˜๋˜๋Š” ํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ ์€ ์ˆ˜์˜ ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•จ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ๊ธฐ์‹ฌ ๋งŽ์€ ํ”Œ๋ ˆ์ด์–ด์™€ ๊ธฐ์ˆ  ์ง€ํ–ฅ ๋…์ž ๋ชจ๋‘๋ฅผ ์œ„ํ•ด ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํผ์ฆ์„ ๊ฒ€์ƒ‰ ๋ฌธ์ œ๋กœ ๋ณด๊ธฐ

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

์ง€๋„์ฒ˜๋Ÿผ ์ƒ์ƒํ•ด๋ณด์„ธ์š”. ๊ฐ ๊ต์ฐจ๋กœ๊ฐ€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ต์ฐจ๋กœ ์‚ฌ์ด์˜ ๊ฐ ๋„๋กœ๊ฐ€ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ ์ƒํƒœ๋Š” ์ง€๊ธˆ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋ชฉํ‘œ ์ƒํƒœ๊ฐ€ ๋ชฉ์ ์ง€์ž…๋‹ˆ๋‹ค. ์†”๋ฒ„์˜ ์ผ์€ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๋ž€?

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์€ ๋งค์šฐ ํŠน์ •ํ•œ ์ˆœ์„œ๋กœ ์ด ์ƒํƒœ ์ง€๋„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค: ์‹œ์ž‘์—์„œ 1์ˆ˜ ๋–จ์–ด์ง„ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ๋จผ์ € ํ™•์ธํ•˜๊ณ , ๊ทธ ๋‹ค์Œ 2์ˆ˜ ๋–จ์–ด์ง„ ๋ชจ๋“  ์ƒํƒœ๋ฅผ, ๊ทธ ๋‹ค์Œ 3์ˆ˜, ์‹์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐฉํ–ฅ์œผ๋กœ ์ธต๋ณ„๋กœ ๊ท ๋“ฑํ•˜๊ฒŒ ํŽผ์ณ์ง‘๋‹ˆ๋‹ค.

์ด ์ธตํ™”๋œ ์ ‘๊ทผ๋ฒ•์ด ์ตœ์ ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. BFS๋Š” ์–ด๋–ค 6์ˆ˜ ํ•ด๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์ „์— ๋ชจ๋“  5์ˆ˜ ํ•ด๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชฉํ‘œ ์ƒํƒœ์— ์ฒ˜์Œ ๋„๋‹ฌํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ๋„๋‹ฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ์งง์€ ๊ฒฝ๋กœ๋ฅผ ๋†“์น  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹คโ€”โ€”๋ชจ๋“  ์งง์€ ๊ฐ€๋Šฅ์„ฑ์€ ์ด๋ฏธ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

  1. ์ดˆ๊ธฐ ๋ณด๋“œ ์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ทธ ์ƒํƒœ์—์„œ ๋ชจ๋“  ์œ ํšจํ•œ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ˆ˜๋Š” ์ƒˆ ๋ณด๋“œ ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ์ด ์ƒˆ ์ƒํƒœ ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ํ•ด๊ฒฐ๋œ ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ˆ˜์˜ ์‹œํ€€์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ์ƒˆ ์ƒํƒœ๋ฅผ ํ์— ์ถ”๊ฐ€ํ•˜๊ณ  ํ์˜ ๋‹ค์Œ ์ƒํƒœ๋กœ 2๋‹จ๊ณ„๋ถ€ํ„ฐ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ชฉํ‘œ๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ๋ชจ๋“  ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ํƒ์ƒ‰๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค.

ํ๊ฐ€ ํ•ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  ๋น„์–ด์ง€๋ฉด ํผ์ฆ์€ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹คโ€”โ€”์†”๋ฒ„๊ฐ€ ์ฆ‰์‹œ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๊ณต๊ฐ„ ํ‘œํ˜„

BFS๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ์†”๋ฒ„๊ฐ€ ๊ฐ ๋ณด๋“œ ์ƒํƒœ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ  ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ChromaOracle์€ ๊ฐ ์‹œํ—˜๊ด€์„ ์ƒ‰์˜ ์Šคํƒ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์ „์ฒด ๋ณด๋“œ๋ฅผ ์ด๋Ÿฌํ•œ ์Šคํƒ์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ™์€ ์ƒํƒœ๋ฅผ ๋‘ ๋ฒˆ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ดโ€”โ€”์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜๊ธฐ ๋•Œ๋ฌธโ€”โ€”์†”๋ฒ„๋Š” ๊ฐ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๊ทœ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํ‚ค๋Š” ์‹œํ—˜๊ด€ ์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ๋ฐฐ์—ด์„ ๊ฐ™์€ ์ƒํƒœ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๋ณด๋“œ์˜ ์ •๊ทœํ™”๋œ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ๋‘ ๋ณด๋“œ๊ฐ€ ๊ฐ™์€ ์‹œํ—˜๊ด€ ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ขŒ์šฐ ์ˆœ์„œ๋งŒ ๋‹ค๋ฅด๋‹ค๋ฉด ๊ฐ™์€ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ค‘๋ณต์œผ๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.

์ด ์ค‘๋ณต ์ œ๊ฑฐ๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ ์—†์ด๋Š” ์†”๋ฒ„๊ฐ€ ๊ฐ™์€ ์œ„์น˜๋ฅผ ์ˆ˜๋ฐฑ๋งŒ ๋ฒˆ ์žฌ๋ฐฉ๋ฌธํ•˜์—ฌ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•  ์ •๋„๋กœ ๋А๋ ค์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์†”๋ฒ„๋Š” ๊ฐ ๊ณ ์œ  ์ƒํƒœ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์™œ BFS๊ฐ€ ์ตœ๋‹จ ํ•ด๋ฅผ ๋ณด์žฅํ•˜๋Š”๊ฐ€

๋ณด์žฅ์€ ํƒ์ƒ‰ ์ˆœ์„œ์—์„œ ์˜ต๋‹ˆ๋‹ค. BFS๋Š” ์‹œ์ž‘์—์„œ์˜ ๊ฑฐ๋ฆฌ(์ˆ˜์˜ ์ˆ˜๋กœ ์ธก์ •)์— ๋”ฐ๋ผ ์—„๊ฒฉํžˆ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋ฆฌ๊ฐ€ N์ธ ๋ชจ๋“  ์ƒํƒœ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ N+1์ธ ์–ด๋–ค ์ƒํƒœ๋ณด๋‹ค ๋จผ์ € ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์†”๋ฒ„๊ฐ€ ๋ชฉํ‘œ ์ƒํƒœ์— ์ฒ˜์Œ ๋„๋‹ฌํ•˜๋ฉด ๊ธธ์ด N์˜ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ๋„๋‹ฌํ•œ ๊ฒƒ์ด๋ฉฐ, ๊ธธ์ด๊ฐ€ N ๋ฏธ๋งŒ์ธ ๊ฒฝ๋กœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹คโ€”โ€”๋ชจ๋“  ์งง์€ ๊ฒฝ๋กœ๋Š” ์ด๋ฏธ ์™„์ „ํžˆ ํƒ์ƒ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ•™์  ์†์„ฑ์ด๋ฉฐ ํœด๋ฆฌ์Šคํ‹ฑ์ด๋‚˜ ๊ทผ์‚ฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. BFS๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•ด๋Š” ์ฆ๋ช… ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ตœ์ ์ž…๋‹ˆ๋‹ค.

BFS์™€ DFS

ChromaOracle์€ ๋Œ€์•ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. DFS๋Š” ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค: ์ธต๋ณ„๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋Œ€์‹  ๋ฐฑํŠธ๋ž˜ํ‚นํ•˜๊ธฐ ์ „์— ๊ฐ€๋Šฅํ•œ ํ•œ ๊นŠ๊ฒŒ ๋‹จ์ผ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

์žฅ๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • BFS๋Š” ์ตœ๋‹จ ํ•ด๋ฅผ ์ฐพ์ง€๋งŒ, ํ˜„์žฌ ๊นŠ์ด ์ˆ˜์ค€์˜ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ๋™์‹œ์— ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • DFS๋Š” ๋งŽ์€ ๊ฒฝ์šฐ ๋” ๋น ๋ฅด๊ฒŒ ํ•ด๋ฅผ ์ฐพ๊ณ  ๋” ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํ•ด๊ฐ€ ์ตœ๋‹จ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ๋‚œ ์ฒซ ๋ฒˆ์งธ ์œ ํšจํ•œ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ BFS๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์ž…๋‹ˆ๋‹คโ€”โ€”์ตœ์†Œ ์ˆ˜์˜ ์ˆ˜๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. DFS๋Š” ๋‹จ์ง€ ์–ด๋–ค ํ•ด๋ผ๋„ ๋นจ๋ฆฌ ์›ํ•  ๋•Œ ๋˜๋Š” ํผ์ฆ์ด BFS๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์— ๋น ์งˆ ์ •๋„๋กœ ํด ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ์Šคํ„ฐ๋ฆฌ ๋ชจ๋“œ ์ž‘๋™ ์›๋ฆฌ

ChromaOracle์˜ ๊ฐ€์žฅ ๋…ํŠนํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ์ˆจ๊ฒจ์ง„ ๋˜๋Š” ์•Œ ์ˆ˜ ์—†๋Š” ์ƒ‰์„ ํฌํ•จํ•˜๋Š” ํผ์ฆ์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ๋ฏธ์Šคํ„ฐ๋ฆฌ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ํผ์ฆ ๊ฒŒ์ž„์—์„œ ์ผ๋ถ€ ์‹œํ—˜๊ด€ ์Šฌ๋กฏ์€ ์ƒ‰ ๋Œ€์‹  ๋ฌผ์Œํ‘œ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ, ์‹ค์ œ ์ƒ‰์€ ๊ทธ ์ธต์ด ์‹œํ—˜๊ด€ ๊ฐ€์žฅ ์œ„๊ฐ€ ๋  ๋•Œ๋งŒ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค.

ChromaOracle์€ ์ˆœ์—ด ๋ถ„์„์„ ํ†ตํ•ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค:

  1. ์†”๋ฒ„๊ฐ€ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ๋ชจ๋“  ์œ„์น˜๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  2. ํผ์ฆ์˜ ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋Š”โ€”โ€”๊ฐ ์ƒ‰์ด ์ •ํ™•ํ•œ ํšŸ์ˆ˜๋งŒํผ ๋‚˜ํƒ€๋‚˜์•ผ ํ•˜๋Š”โ€”โ€”๊ทธ ์œ„์น˜์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ƒ‰ ํ• ๋‹น์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜ค๋Š” ๊ฐ ํผ์ฆ์„ BFS๋ฅผ ์‚ฌ์šฉํ•ด ๋…๋ฆฝ์ ์œผ๋กœ ํ’€์–ด๋ƒ…๋‹ˆ๋‹ค.
  4. ๋ชจ๋“  ํ•ด ์ง‘ํ•ฉ์„ ๋ถ„์„ํ•˜์—ฌ ์ˆจ๊ฒจ์ง„ ์ƒ‰์ด ๋ฌด์—‡์ด๋“  ์•ˆ์ „ํ•œ ์ˆ˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ "๊ณตํ†ต ์ ‘๋‘์‚ฌ" ์ฐพ๊ธฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹คโ€”โ€”๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ƒ‰ ํ• ๋‹น์˜ ํ•ด ์‹œ์ž‘์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฐ€์žฅ ๊ธด ์ˆ˜์˜ ์‹œํ€€์Šค. ์ด ์ˆ˜๋“ค์€ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด ๋ฌด์—‡์œผ๋กœ ๋“œ๋Ÿฌ๋‚˜๋“  ์ •ํ™•ํ•จ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ๋ฒ•์€ ๋ถˆํ™•์‹ค์„ฑ์˜ ๋ฌธ์ œ๋ฅผ ์ฒ ์ €ํ•œ ๋ถ„์„์˜ ๋ฌธ์ œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์†”๋ฒ„๋Š” ์ถ”์ธกํ•˜๋Š” ๋Œ€์‹  ๋ชจ๋“  ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•˜๊ณ  ์–ด๋–ค ์ˆ˜๊ฐ€ ์œ„ํ—˜ ์—†๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์„ฑ๋Šฅ๊ณผ ์‹ค์ œ ํ•œ๊ณ„

์ปฌ๋Ÿฌ ์†ŒํŠธ ํผ์ฆ์˜ ์ƒํƒœ ๊ณต๊ฐ„์€ ์‹œํ—˜๊ด€๊ณผ ์ƒ‰์˜ ์ˆ˜์— ๋”ฐ๋ผ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ปค์ง‘๋‹ˆ๋‹ค. 5๊ฐœ ์ƒ‰์˜ ๋‹จ์ˆœํ•œ ํผ์ฆ์€ ์ˆ˜์ฒœ ๊ฐœ์˜ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 12๊ฐœ ์ƒ‰์˜ ๋ณต์žกํ•œ ํผ์ฆ์€ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ChromaOracle์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํžˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํผ์ฆโ€”โ€”์•ฝ 10๊ฐœ ์ƒ‰๊นŒ์ง€โ€”โ€”์€ BFS๊ฐ€ 1์ดˆ ๋ฏธ๋งŒ์— ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋” ํฐ ํผ์ฆ์€ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ํฐ ๊ตฌ์„ฑ์€ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ์‹œ์ ์—์„œ DFS๊ฐ€ ๋” ๋‚˜์€ ์˜ต์…˜์ด ๋ฉ๋‹ˆ๋‹ค.

์†”๋ฒ„๋Š” ์ˆœ์ˆ˜ ๊ณ„์‚ฐ์ด๋ฉฐ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์ด ์—†์Šต๋‹ˆ๋‹ค. ํผ์ฆ ๋ฐ์ดํ„ฐ๋Š” ๋””๋ฐ”์ด์Šค๋ฅผ ๋– ๋‚˜์ง€ ์•Š์œผ๋ฉฐ ํ’€์ด ์†๋„๋Š” ๋””๋ฐ”์ด์Šค์˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์—๋งŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

์—”์ง„ ์•„ํ‚คํ…์ฒ˜

๊ธฐ์ˆ  ๊ตฌํ˜„์— ๊ด€์‹ฌ ์žˆ๋Š” ๋…์ž๋ฅผ ์œ„ํ•ด, ChromaOracle์˜ ์†”๋ฒ„ ์—”์ง„์€ ์ง‘์ค‘๋œ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  • Container(์ปจํ…Œ์ด๋„ˆ) โ€”โ€” ๋‹จ์ผ ์‹œํ—˜๊ด€์„ ์ƒ‰์˜ ์Šคํƒ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ push, pop, ๊ฐ€์žฅ ์œ„ ์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • Collection(์ปฌ๋ ‰์…˜) โ€”โ€” ์ „์ฒด ๋ณด๋“œ๋ฅผ ํ‘œํ˜„ํ•˜๋ฉฐ ํ˜„์žฌ ์ƒํƒœ์—์„œ ๋ชจ๋“  ์œ ํšจํ•œ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ์ •๊ทœ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Search(ํƒ์ƒ‰) โ€”โ€” BFS์™€ DFS ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜๋ฉฐ ํ ๋˜๋Š” ์Šคํƒ๊ณผ ๋ฐฉ๋ฌธ๋œ ์ƒํƒœ ์ง‘ํ•ฉ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • Strategy(์ „๋žต) โ€”โ€” ๋‹ค์ค‘ ํ•ด ๋ถ„์„์„ ์กฐ์ •ํ•˜๋ฉฐ ๋ชจ๋“  ํ•ด๋ฅผ ์ฐพ๊ณ  ๋ฏธ์Šคํ„ฐ๋ฆฌ ๋ชจ๋“œ์šฉ ๊ณตํ†ต ์ ‘๋‘์‚ฌ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • Validation(๊ฒ€์ฆ) โ€”โ€” ํ’€์ด๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ํผ์ฆ ๊ตฌ์„ฑ์ด ์ž˜ ํ˜•์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์—”์ง„์€ ํ”„๋ ˆ์ž„์›Œํฌ ์˜์กด์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ TypeScript์ด๋ฉฐ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ณ  ์–ด๋–ค JavaScript ๋Ÿฐํƒ€์ž„์—๋„ ์ด์‹ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

ChromaOracle์ด ํŠน์ • ํผ์ฆ์—์„œ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ด์œ ๋Š”?

ํ’€์ด ์‹œ๊ฐ„์€ ์ƒํƒœ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ์— ์˜์กดํ•˜๋ฉฐ ์ด๋Š” ์ƒ‰, ์‹œํ—˜๊ด€, ๋นˆ ์Šฌ๋กฏ์˜ ์ˆ˜์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ƒ‰์ด ๋งŽ๊ณ  ๋นˆ ์‹œํ—˜๊ด€์ด ์ ์„์ˆ˜๋ก ํƒ์ƒ‰ํ•  ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. ๋นˆ ์‹œํ—˜๊ด€์ด 1๊ฐœ์ธ 12์ƒ‰ ํผ์ฆ์€ ๋นˆ ์‹œํ—˜๊ด€์ด 3๊ฐœ์ธ 4์ƒ‰ ํผ์ฆ๋ณด๋‹ค ํ›จ์”ฌ ํฐ ์ƒํƒœ ๊ณต๊ฐ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์†”๋ฒ„๊ฐ€ ํ•ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

ํ•ด๊ฐ€ ์กด์žฌํ•˜๋ฉด BFS๋Š” ํ•ญ์ƒ ๊ทธ๊ฒƒ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. BFS๊ฐ€ ํ•ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  ์™„๋ฃŒ๋˜๋ฉด ํผ์ฆ์€ ์ˆ˜ํ•™์ ์œผ๋กœ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹คโ€”โ€”์œ ํšจํ•œ ์ˆ˜์˜ ์‹œํ€€์Šค๊ฐ€ ๋ชฉํ‘œ ์ƒํƒœ์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ChromaOracle์€ ์ด๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด๊ณ ํ•˜๋ฏ€๋กœ ํผ์ฆ์ด ๋‹จ์ง€ ์–ด๋ ค์šด ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ถˆ๊ฐ€๋Šฅํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BFS ํ•ด๋Š” ํ•ญ์ƒ ์ตœ์„ ์ธ๊ฐ€์š”?

๋„ค. BFS๋Š” ์ˆ˜์˜ ์ˆ˜ ์ธก๋ฉด์—์„œ ์ตœ๋‹จ ํ•ด๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. BFS๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•ด๋ณด๋‹ค ์ ์€ ์ˆ˜์˜ ์œ ํšจํ•œ ํ•ด๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ•™์  ์†์„ฑ์ž…๋‹ˆ๋‹ค.

๋ฏธ์Šคํ„ฐ๋ฆฌ ๋ชจ๋“œ๋Š” ์–ด๋–ค ์ˆ˜๊ฐ€ ์•ˆ์ „ํ•œ์ง€ ์–ด๋–ป๊ฒŒ ์•„๋‚˜์š”?

๋ฏธ์Šคํ„ฐ๋ฆฌ ๋ชจ๋“œ๋Š” ์ˆจ๊ฒจ์ง„ ์ƒ‰์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ํ• ๋‹น์— ๋Œ€ํ•ด ํผ์ฆ์„ ํ’€์–ด๋‚ด๊ณ  ๋ชจ๋“  ํ•ด๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๊ฐ€ ๋ชจ๋“  ๊ฐ€๋Šฅ์„ฑ์˜ ์ตœ์  ํ•ด์— ๋‚˜ํƒ€๋‚  ๋•Œ๋งŒ ์•ˆ์ „ํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ทธ ์ˆ˜๊ฐ€ ์ˆจ๊ฒจ์ง„ ์ƒ‰์ด ๋ฌด์—‡์ด๋“  ์ •ํ™•ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํผ์ฆ์— ๋ง‰ํ˜”๋‚˜์š”?

์ƒ‰์„ ChromaOracle์— ์ž…๋ ฅํ•˜๋ฉด ๋ช‡ ์ดˆ ์•ˆ์— ์ตœ์  ํ•ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ChromaOracle ์†”๋ฒ„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

๊ด€๋ จ ๊ฐ€์ด๋“œ

์›Œํ„ฐ ์†ŒํŠธ ํผ์ฆ ํ‘ธ๋Š” ๋ฒ•:์™„๋ฒฝ ์ „๋žต ๊ฐ€์ด๋“œ

์–ด๋–ค ์›Œํ„ฐ ์†ŒํŠธ ๋ ˆ๋ฒจ์ด๋“  ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ฆ๋œ ์ „๋žต์„ ๋ฐฐ์›Œ๋ณด์„ธ์š”. ์ดˆ๋ณด์ž ํŒ๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ๊ธฐ๋ฒ•๊นŒ์ง€, ์ƒ‰๊น” ๋ถ„๋ฅ˜ ์‹œํ—˜๊ด€ ํผ์ฆ์„ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ณผ ์†ŒํŠธ ํผ์ฆ ํ‘ธ๋Š” ๋ฒ•:์™„๋ฒฝ ์ „๋žต ๊ฐ€์ด๋“œ

์–ด๋–ค ๋ณผ ์†ŒํŠธ ๋ ˆ๋ฒจ์ด๋“  ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ฆ๋œ ์ „๋žต์„ ๋ฐฐ์›Œ๋ณด์„ธ์š”. ์ดˆ๋ณด์ž ํŒ๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ๊ธฐ๋ฒ•๊นŒ์ง€, ์ƒ‰๊น” ๋ถ„๋ฅ˜ ์‹œํ—˜๊ด€ ํผ์ฆ์„ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋„ˆํŠธ ์†ŒํŠธ ํผ์ฆ ํ‘ธ๋Š” ๋ฒ•:์™„๋ฒฝ ์ „๋žต ๊ฐ€์ด๋“œ

์–ด๋–ค ๋„ˆํŠธ ์†ŒํŠธ ๋ ˆ๋ฒจ์ด๋“  ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ฆ๋œ ์ „๋žต์„ ๋ฐฐ์›Œ๋ณด์„ธ์š”. ์ดˆ๋ณด์ž ๊ธฐ์ดˆ๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ์ˆ˜ ๊ณ„ํš ๊ธฐ๋ฒ•๊นŒ์ง€, ๋” ์ ์€ ์‹ค์ˆ˜๋กœ ์–ด๋ ค์šด ๋ ˆ๋ฒจ์„ ํด๋ฆฌ์–ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.