step 1. ์ตœ์ ํ™” ํ•ด์•ผ ํ• ๊ฒƒ ์ฐพ๊ธฐ.

์ตœ์†Œํ•œ ์ตœ์ ํ™”๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋ญ˜ ์ตœ์ ํ™” ํ•ด์•ผํ• ์ง€ ์ฐพ์•„์•ผ ์ตœ์ ํ™”๋ฅผ ํ• ์ˆ˜์žˆ์Œ.

ํ”„๋กœํŒŒ์ผ๋Ÿฌ๊ฑด, ๋กœ๊ทธ ์ˆ˜์ง‘์ด๊ฑด, ํ…Œ์ŠคํŠธ๊ฑด ์–ด๋””์„œ ๋ณดํ‹€๋„ฅ์ด ๊ฑธ๋ฆฌ๋Š”์ง€ ์ฐพ์•„์•ผํ•จ.


๊ฒŒ์ž„ ์—ญ์‹œ ํ”„๋กœ๊ทธ๋žจ์ด๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฉ์–ธ์— ๋”ฐ๋ผ 20:80 ๋ฒ•์น™์ด ์•„์ฃผ ์ž˜ ์ด๋ค„์ง€๋Š”๊ณณ์ค‘ ํ•˜๋‚˜์ž„.


20%์˜ ์ฝ”๋“œ๊ฐ€ 80%์˜ ๋ถ€ํ•˜๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค๊ฑฐ๋‚˜,

ํ•ต์‹ฌ ์ฝ”๋“œ๊ฐ€ 20%๋ผ๋ฉด ๋‚˜๋จธ์ง€ 80%๋Š” ๋‹จ์ˆœํ•œ ๊ฒŒํ„ฐ/์„ธํ„ฐ์— ๋ถˆ๊ณผํ•˜๋‹ค๋˜์ง€ ํ•˜๋Š” ๋“ฑ๋“ฑ์˜ ๊ฒฉ์–ธ์ด ๊ทธ๋Œ€๋กœ ์ ์šฉ๋จ...


๊ทธ๋Ÿฌ๋ฉด ์šฐ๋ฆฌ ๊ฒŒ์ž„์„ ๋ง์น˜๋Š” 20%๋Š” ์–ด๋””์— ์žˆ์„๊นŒ?


์ด๋ก ์ ์œผ๋กœ ๊ฒŒ์ž„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ ๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž.. (๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ํฌ๊ธฐํ•œ๋‹ค! ์œผ์•…!)

๋Œ€์ถฉ ์ด๋Ÿฐ๊ฑธ๋กœ ๋‚˜๋ˆ„๋Š”๋ฐ O(~~) ~~์— ์•„๋ž˜ ์ˆซ์ž๋ฅผ ๋„ฃ์–ด์„œ ์”€.


1(constant) - ย ์ž…๋ ฅ์ž๋ฃŒ์˜ ์ˆ˜์— ๊ด€๊ณ„ ์—†์ด ์ผ์ •ํ•œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๊ฐ€์ง.ย 

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ์ŠคํŠธ ๊ฐ™์€ ๊ฒฝ์šฐ์— isEmpty ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์ƒ์ˆ˜์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๋ณด๋ฉด ๋จ. ๋˜๋Š” ํ•ด์‰ฌ๋งต์˜ ์„œ์น˜ ์‹œ๊ฐ„ ๋“ฑ๋“ฑ์ด ์žˆ์Œ.

log N(๋กœ๊ฐ€๋ฆฌ์Šด) - ๋งŒ์•ฝ ์ž…๋ ฅ ์ž๋ฃŒ์˜ ์ˆ˜์— ๋”ฐ๋ผ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ด log N ๋งŒํผ ๊ฑธ๋ฆผ. (์—ฌ๊ธฐ์„œ log๋Š” log2๋ฅผ ์ฃผ๋กœ ๋งํ•จ. ์ด์ง„์ˆ˜๋ผ ๊ทธ๋Ÿผ.)ย 

์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ์˜ ์ด์ง„ ํƒ์ƒ‰์ด ์ด๋Ÿฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ. ย ๋˜๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํƒ์ƒ‰ ์‹œ๊ฐ„ ?

N(Linear) - ์ž…๋ ฅ ์ž๋ฃŒ์˜ ์ˆ˜์— ๋”ฐ๋ผ ์„ ํ˜•์ ์œผ๋กœ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ

for loop ๋ฐ ์—ฌ๋Ÿฌ ๋ฃจํ”„ ๋‚˜ ๊ทธ๋ƒฅ ๋ฆฌ์ŠคํŠธ์˜ ํƒ์ƒ‰ ์‹œ๊ฐ„ ์ด ์ด๋Ÿผ.ย 

N logN - ์ž…๋ ฅํ•œ ์ž๋ฃŒ์˜ ์ˆ˜์— ๋”ฐ๋ผย nlogn๋งŒํผ ๊ฑธ๋ฆผ.

๋จธ์ง€์†”ํŠธ (merge sort)๋‚˜ ํ€ต์†”ํŠธ (quick sort) ๋“ฑ์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์ž„. ์˜ˆ๋“ค์€ ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ„ ๋Œ€์‹  ์‹œ๊ฐ„์„ ์žก์•˜๋‹ค ๋ผ๊ณ  ๋ณด๋ฉด ๋จ.ย 

N^2(quadratic) - ์ž…๋ ฅํ•œ ์ž๋ฃŒ์˜ ์ˆ˜์˜ ์ œ๊ณฑ๋งŒํผ ๊ฑธ๋ฆผ.ย 

๋ฒ„๋ธ” ์†”ํŠธ, ์…€๋ ‰์…˜, ์ธ์„ค์…˜ ์†”ํŠธ, ๋ฌผ๋ฆฌ ์—”์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ๋“ฑ์ด ์ด๋Ÿฐ๋ฐ ์†ํ•จ.

N^3 (Cubic) -ย ์ž…๋ ฅํ•œ ์ž๋ฃŒ์˜ ์ˆ˜์˜ ์„ธ์ œ๊ณฑ๋งŒํผ ๊ฑธ๋ฆผ.ย 

์ด๋Ÿฐ๊ฑด ๋”ฑํžˆ ๋ณธ์ ์ด ์—†์ง€๋งŒ 3์ค‘๋ฃจํ”„ ๋Œ๋ฆฌ๋ฉด ์ด๋ ‡๊ฒŒ ๋จ. ์˜ˆ๋ฅผ ๋“ค์–ด ย a,b,c๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋งˆ ์ด๋Ÿด๊ฑฐ์ž„.

2^nย (์ง€์ˆ˜ํ•จ์ˆ˜;;) - ์ด๋Ÿฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ณธ์  ์—†์–ด์„œ ๋ชจ๋ฅด๊ฒ ์Œ;; ๋Œ€์ถฉ ์œ ์ „ํ•™์ด๋‚˜ ์ƒ๋ฌผํ•™, ์‚ฌํšŒ๊ณผํ•™ ๋“ฑ๋“ฑ์˜ ๊ฒฝ์šฐ๋Š” ์ด๋Ÿฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ.

๋ฌผ๋ก  ์ด ์ด์ƒ๋„ ์žˆ๊ณ ... ๊ทธ๋ž˜์„œ ์ˆ˜ํ•™์„ ์ž˜ ์•Œ์•„์•ผ;;


๊ณต๊ฐ„ ๋ณต์žก๋„๋Š”ย 

array๊ฐ€ ๊ฐ€์žฅ ์ข‹๊ณ , vector, list, map/set, unorderd map(hash map) ๋“ฑ๋“ฑ์˜ ์ˆœ์„œ๋กœ ๋ณต์žกํ•ด์ง.


array๋ž‘ list ๋ž‘ ์ด๋ก ์ ์œผ๋กœ ๋น„์Šท ํ•œ๊ฑฐ ์•„๋‹˜?

ํ• ์ˆ˜ ์žˆ๋Š”๋ฐ cpu์—์„œ ๋Œ๋•Œ ์บ์‹œ๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ˆ์ด๊ฐ€ ๋” ์ข‹์Œ.ย 

์‹ค์ œ๋กœ ํ•ด์‰ฌ๋งต์œผ๋กœ O(1) ๋กœ ์ฐพ์•„์˜ค๋Š”๊ฒƒ๊ณผ ์–ด๋ ˆ์ด์—์„œ O(N) ์œผ๋กœ ์ฐพ์•„์˜ค๋Š”๊ฒƒ์˜ ์‹คํ–‰ ์†๋„๊ฐ€ ๋น„์Šทํ•จ.


๊ทธ๋ž˜์„œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์“ฐ๊ธฐ ํŽธํ•ด๋„ vector ๋‚˜ array๋ฅผ ์“ฐ๋Š”๊ฑฐ๊ณ 

union๊ณผ malloc/free๋ฅผ ์•„์ง๊นŒ์ง€ ์“ฐ๊ณ  ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด ๋จ.


๋‹ค์‹œ ๋ณธ๋ฌธ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ


๊ฒŒ์ž„์—์„œ ์ด๋ก ์ ์œผ๋กœ ๊ฒŒ์ž„ ๋กœ์ง์€ O(N) ๋งŒํผ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ณ 

๊ทธ๋ž˜ํ”ฝ์€ O(N) ~ O(NlogN) ๋งŒํผ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง. (์ด์ƒ์ ์ผ ๊ฒฝ์šฐ O(N), ์ตœ์•…์˜ ๊ฒฝ์šฐ O(NLogN))

๋ฌผ๋ฆฌ๋Š” O(N^2) ๋งŒํผ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋จ.


์—ฌ๊ธฐ์„œ์˜ ๋กœ์ง์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋กœ์ง์ „์ฒด๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ N ๋ฒˆ๋งŒํผ์˜ ์‹คํ–‰์ด ํ•„์š” ํ•˜๋‹ค๋Š” ๋œป์ž„.


์ด ๋ง์€ ์˜ค๋ธŒ์ ํŠธ์— ๊ฐ•์ฒด์™€, ์ถฉ๋Œ์ฒด, ์Šคํ”„๋ผ์ดํŠธ๊ฐ€ ์žˆ๊ณ , ์ปจํŠธ๋กค๋Ÿฌ ๋กœ์ง ๊นŒ์ง€ ์žˆ๋‹ค๋ฉด

์ด ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ถ”๊ฐ€ ๋˜์—ˆ์„์‹œย ๊ฐ๊ฐ์˜ ์‹œ์Šคํ…œ์— ์ €๋งŒํผ์˜ N+1์˜ ๋ถ€ํ•˜๋ฅผ ๋” ์ค€๋‹ค๋Š” ๋œป์ž„.


์‚ฌ๋žŒ๋“ค์€ ๋˜‘๋˜‘ํ•ด์„œ? ๊ทธ๋ž˜ํ”ฝ์˜ ๊ฒฝ์šฐ์—๋Š” ์ปฌ๋ง๊ณผ, ํด๋ฆฌํ•‘ ๋“ฑ๋“ฑ์„ ์ด์šฉํ•ด์„œ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์คŒ.

(๊ทธ๋ž˜ํ”ฝ์€ ๋œ๋ฐฐ์›Œ์„œ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์๋‹ˆ๋‹ค... ใ…ˆใ……ํ•ฉ๋‹ˆ๋‹ค...)

๋ฌผ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” Broad Phase ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์คŒ.ย 



๋Œ€์ถฉ ๋ฐฉ์‹๋“ค์„ ๋งํ•˜์ž๋ฉด N์˜ ์ˆซ์ž๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ๊ณ„์‚ฐ ๋ฐฉ์‹์ž„.

๋ฌผ๋ฆฌ์˜ ๊ฒฝ์šฐ O(N^2) ์„ ์‹คํ–‰ํ•˜๊ธฐ์ „์—, O(N)์ •๋„ ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด์„œ,

N์˜ ์ˆซ์ž๋ฅผ ํ˜„์ €ํ•˜๊ฒŒ ์ค„์ด๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ตœ์ ํ™”๋ฅผ ํ•จ.

๋Œ€์ถฉ ์ด์ƒ์ ์ธ ์ƒํ™ฉ์—์„œ R-Tree ๋ฐฉ์‹์˜ ๋ธŒ๋กœ๋“œ ํŽ˜์ด์ฆˆ๋ฅผ ํ–ˆ๋‹ค๊ณ  ๋ณด์ž.ย 

ํ•œ๊ณ„ objject๋ฅผ 3๊ฐœ๋ผ ๋‘๊ณ , ์˜ค๋ธŒ์ ํŠธ 1000๊ฐœ๊ฐ€ ๋ˆ๋‹ค๋ฉด,

O(1000) ์ดํ›„์— O(1800) ์„ ํ•˜๋Š”์‹์œผ๋กœ ์ค„์–ด๋“ค ์—ฌ์ง€๊ฐ€ ์žˆ์Œ.

๊ทธ๋ƒฅ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด O(1000000) ๋งŒํผ ๋Œ์•„๋ฒ„๋ฆฌ๋Š” ํ˜„์ƒ์ด ์ผ์–ด๋‚จ....

์ด๋ ‡๊ฒŒ ๋˜๋ฉด O(1000000) ์™€ย O(2800)์˜ ์ฐจ์ด๋Š” ๊ฒŒ์ž„์—์„œ ์—„์ฒญ ํฐ ํšจ๊ณผ๋ฅผ ๋ถˆ๋Ÿฌ ์ผ์œผํ‚ฌ์ˆ˜ ์žˆ์Œ.

์ด๋Ÿฐ ์ƒํ™ฉ์€ ๋ฌผ๋ก  ๋ณ„๋กœ ์—†๊ณ , O(1000000) ์„ ๋ˆ๋‹ค๋ฉด O(5000~50000) ์ •๋„์˜ ๊ธฐ๋Œ“๊ฐ’์ด ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด ๋จ.

์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ๋Œ€์ถฉ ์‹คํ–‰์‹œ๊ฐ„์ด 1/5000 ๋ฐฐ ๋งŒํผ ์ค„์–ด๋“ค๊ฑฐ๋‚˜ ์ ์–ด๋„ 1/100 ๋ฐฐ ๋งŒํผ ์ค„์–ด๋“ ๋‹ค๊ณ  ํ•จ.

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

์ด๋Ÿฐ ๋ถ€์ž‘์šฉ์ด ์ƒ๊ฒจ์„œ. ๋„์ €ํžˆ ์›์ธ์„ ์•Œ์ˆ˜ ์—†๋Š” ๋ฒ„๊ทธ์˜ ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•จ.ย 


์œ ๋ช…ํ•œ ๋ฌผ๋ฆฌ์—”์ง„์ธ ๋ฐ•์Šค 2D ๋‚˜ ๋ถˆ๋ › ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ง„์งœ ๊ณต๊ฐ„ ๋ณต์žก๋„๊นŒ์ง€ ์—„์ฒญ ๊ณ ๋ ค ํ•ด์„œ ์งฐ๊ธฐ ๋•Œ๋ฌธ์—

์‹คํ–‰์‹œ๊ฐ„์ด ์ง์ ‘๋งŒ๋“  ์—”์ง„์— ๋น„ํ•ด ์—„์ฒญ๋‚˜๊ฒŒ ๋น ๋ฅธ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•จ. (๊ทธ๋ž˜์„œ ์ƒ์šฉ์—”์ง„๋“ค๋„ ์š” ๋ฌผ๋ฆฌ์—”์ง„์„ ์“ฐ๋Š”๊ฑฐ...)

ํ•˜๋ณต์ด๋‚˜ ํ”ผ์ง์Šค๋Š” ๋งํ• ๊ฒƒ๋„ ์—†๋‹ค๊ณ  ๋ณด๋ฉด ๋ ๋“ฏ.


๊ทธ๋Ÿผ step 2. ์ตœ์ ํ™”๋ฅผ ํ•ด๋ณด์ž;;


์š”๊ฑด ๋ฌผ๋ฆฌ์—์„œ ์ตœ์ ํ™” ํ• ๋งŒํ•œ ๋ฐฉ๋ฒ•์ž„.

์ด๊ฑด ๋‘ ์—์„œ ํ•œ ๋ฐฉ์‹์ธ๋ฐ, ๊ณ ์ „์ ์ด์ง€๋งŒ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ค‘ ํ•˜๋‚˜์ž„.


๋‘ (์˜›๋‚ ๊ฑฐ)์˜ ๊ฒฝ์šฐ๋Š” ์ „ํˆฌ๊ฐ€ ์ผ์–ด๋‚ ๋•Œ ํ•œ ๋ฐฉ์—์„œ ์ผ์–ด๋‚˜๋Š”๋ฐ, ์งฑ๊ฐœ์‹์œผ๋กœ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€ ๋ง๊ณ ,

์ด ๋ฐฉ๋งŒ ๊ฒ€์‚ฌ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๋Š”๊ฑฐ์ž„.ย 

๊ทธ๋ ‡๊ฒŒ ๋˜์—ˆ์„ ๋•Œ ๋ณต๋„ ๋‚˜ ์ด๋Ÿฐ๊ณณ์—์„œ๋Š” ์ ์„ ์ผ๋ถ€๋Ÿฌ ์ถœํ˜„์‹œํ‚ค์ง€ ์•Š๊ฑฐ๋‚˜, ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ๋ฐ”๋กœ ์ด๋™ ์‹œํ‚จ๋‹ค๋˜์ง€ ํ•˜๋Š” ์‹์œผ๋กœย 

๋ฌผ๋ฆฌ ๋ถ€ํ•˜๋ฅผ ํšŒํ”ผ ํ• ์ˆ˜ ์žˆ์Œ.


์œพ๋‹ˆํ‹ฐ์—์„œ ์ ์šฉํ• ๋งŒํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด,

๊ฒŒ์ž„ ์”ฌ์„ ์ž˜๊ฒŒ ์ชผ๊ฒŒ์„œ

๊ตฌ์—ญ ๊ตฌ์—ญ๋งˆ๋‹ค ์”ฌ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์š”๋Ÿฐ ๋А๋‚Œ์ด๋ผ ๋ณผ์ˆ˜ ์žˆ์Œ.

๋Œ€์‹ ์— ์ด ๊ฒฝ์šฐ์—๋Š” ๊ฒŒ์ž„ ์Šคํ…Œ์ดํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ๋กœ๋”ฉํƒ€์ž„ ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ๋ณผ์ˆ˜ ์žˆ์Œ.


์˜คํ”ˆ์›”๋“œ ๊ฒŒ์ž„์—์„œ๋Š” ๋ฆฌ์ „์„ ๋งŒ๋“œ๋Š” ์‹์œผ๋กœ ์ตœ์ ํ™”๋ฅผ ํ•˜๋Š”๊ฑฐ ๊ฐ™์€๋ฐ, ์ „ ์ˆ˜์ค€์ด ๋‚ฎ์•„์„œ ๋ชจ๋ฅด๊ฒ ์๋‹ˆ๋‹ค...ย 



๊ทธ๋ž˜ํ”ฝ์—์„œ ํ• ๋งŒํ•œ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•.

์ด๊ฑด 2D ๊ฒŒ์ž„์—์„œ ๊ฐ€์žฅ ์œ ์šฉํ•œ ํŒ์ธ๋ฐ 3D์—์„œ๋Š” ๊นŠ์ด ๋ฒ„ํผ ํ…Œ์ŠคํŠธ ํ• ๋•Œ ๋‹ค ๊ฑธ๋Ÿฌ๋ฒ„๋ ค์„œ ์ด๋Ÿฐ ์ง“๊ฑฐ๋ฆฌ๋ฅผ ์•ˆํ•ด๋„ ๋œ๋‹ค๊ณ  ๋“ค์—ˆ์Œ.

2D๊ฒŒ์ž„์—์„œ alpha ์นผ๋ผ ๊ฐ’์€ ์กธ๋ผ ์ด์œ ๋ฅผ ์•Œ์ˆ˜ ์—†๋Š” ๋А๋ ค์ง์„ ์œ ๋ฐœํ• ์ˆ˜ ์žˆ์Œ.


๊ทธ๋ž˜ํ”ฝ ๋žœ๋”๋ง์—์„œ ์‰์ด๋”๊ฐ€ vertex ๋ฒ„ํผ๋ฅผ ์ง€๋‚˜๊ณ , ํ”ฝ์…€ ๋ฒ„ํผ๋ฅผ ๊ณ„์‚ฐํ• ๋•Œ

ํ•œ ํ”ฝ์…€ ๋งˆ๋‹ค color ๊ฐ’์„ ๊ณ„์† ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์ด๊ฒฝ์šฐ์— alpha ๊ฐ’์€.

sort ํ•œ๋‹ค ํ•˜๋”๋ผ๋„, ๋ฉ€๋ฆฌ์žˆ๋Š” ์ƒ‰๊น”๊ณผย ๊ฐ€๊นŒ์ด ์žˆ๋Š” ์ƒ‰๊น”์—ญ์‹œ ์ „๋ถ€ ๊ทธ๋ ค์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊น€. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ์˜ค๋ฒ„๋“œ๋กœ์šฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ณ ย 

์ด๋•Œ๋ฌธ์— ์ตœ์ ํ™” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ๋ณผ์ˆ˜ ์žˆ์Œ.


๋Œ€์ถฉ ๋ณด๋ฉด 1920*1080 ์˜ ํ•ด์ƒ๋„๋ฅผ ๊ฐ€์ง„ ๊ฒŒ์ž„์ด๋ผ๋ฉด, ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค 2,073,600 ๊ฐœ์˜ ํ”ฝ์…€์„ ๊ทธ๋ ค์•ผ ํ•˜๋Š”๋ฐ

ํ•˜๋‚˜์˜ ํ”ฝ์…€์„ ์—ฌ๋Ÿฌ๋ฒˆ ๊ทธ๋ฆฐ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ๋ณผ์ˆ˜ ์žˆ์Œ...


๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ ์—ญ์‹œ ํ”ผํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๊ฑด ๋‚ด ๋А๋‚Œ์— ์•ฝ๊ฐ„์˜ ์˜ˆ์จ๊ณผ ์ดํŽ™ํŠธ๋ฅผ ํฌ๊ธฐํ•˜๊ณ ,

์„ฑ๋Šฅ์„ ์–ป๋Š” ํšจ๊ณผ๋ผ ๋ณผ์ˆ˜ ์žˆ์Œ. ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋ฐฐ๊ฒฝ์— ์ˆ˜๋งŽ์€ sprite ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ๋ฐฐ์น˜ํ•ด์„œ ์ƒ๊ธฐ๋Š” ๋ž™์ด๋ผ ๋ณด๋ฉด ๋จ...


๋˜ ํŒŒํ‹ฐํด ์‹œ์Šคํ…œ์„ ์นด๋ฉ”๋ผ ์•ž์— ๋‘๋Š”๊ฒƒ๋„ ํ”ผํ•˜๋Š”๊ฒŒ ์ข‹์Œ. ์ด๊ฑฐ๋„ ํ”ฝ์…€์„ ์—ฌ๋Ÿฌ๋ฒˆ ๊ทธ๋ฆฌ๋Š”๊ฒŒ ๋งŽ์•„์ ธ์„œ ๋ž™์ด ์ƒ๊ธด๋‹ค๊ณ  ๋ณด๋ฉด ๋จ.


๊ฒŒ์ž„ ๋กœ์ง์—์„œ ํ• ๋งŒํ•œ ์ตœ์ ํ™”? ํŒ?

์†”์งํžˆ ์ด๊ฑด ์ผ€๋ฐ”์ผ€์ธ๋ฐ, ์ด๊ฑด ๋ฃจํ”„ ๋Œ๋ฆฌ๋Š” ํŒ ์ •๋„? ๊ณ„์‚ฐ ํ•˜๋Š” ํŒ? ์ด๋Ÿฐ ์ •๋„?

๋ฐ–์— ๋ญ๋ผ ์„ค๋ช… ํ•ด์ค„๊ฒŒ ์—†์–ด ๋ณด์ž„.


๋ฃจํ”„๋ฅผ ๋Œ๋ฆด๋•Œ ๋ ์ˆ˜ ์žˆ๋Š”ํ•œ ํ•จ์ˆ˜๋Š” ๋ฐ–์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ๋ฃจํ”„๋ฅผ ๋Œ๋ฆฌ๋Š”๊ฒŒ ์ข‹๋‹ค ์ด๋Ÿฐ๊ฒƒ๋“ค?

for(int i = 0; i < str.length(); ++i)ย {...}

ย ์ด๋Ÿฐ์‹์˜ ๋ฃจํ”„ ๋ณด๋‹ค


int len = str.length();

for(int i=0; i< len; ++i) {...}


์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ํ›จ์”ฌ ์ค„์–ด๋“œ๋Š” ํŒ์ด๋ผ ๋ณผ์ˆ˜ ์žˆ์Œ.

์ด ๊ฒฝ์šฐ์— ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด A(์œ„์—๊ฑฐ) ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ฉดย 

length๊ฐ€ n์ด๋ผ ํ–ˆ์„๋•Œ,

str.length(); ํ•จ์ˆ˜๊ฐ€ n๋ฒˆ์ด๋‚˜ ๋ถˆ๋ฆฌ๋Š” ํ˜„์ƒ์ด ์ƒ๊น€.

๋ฐ˜๋ฉด์— ์•„๋ž˜๊ฑฐ๋Š” ํ•œ๋ฒˆ๋งŒ ๋ถˆ๋ฆฌ๊ณ , ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ณด๋ฉดย 

O(N) ๊ณผ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ์ฐจ์ด๋ฅผ ๋ถˆ๋Ÿฌ์˜ด.


์˜ˆ๋ฅผ ๋“ค์–ด AI๊ฐ€ pathfinding์„ ํ•ด์•ผํ•˜๋ฉด skip ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ๋นŒ๋ ค์™€์„œ

path๋ฅผ ํฌ๊ฒŒ 16๋ถ„ํ• ์„ ํ•œ๋‹ค๋˜์ง€ ํ•˜๋Š”์‹์œผ๋กœ ๋ฏธ๋ฆฌ ๊ฐˆ ๊ณณ์— ๋Œ€ํ•œ ํฐ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ ,

๊ทธ ๋‹ค์Œ์— ์„ธ๋ถ€์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์„œ ๊ณ„์‚ฐํ•˜๋ฉด, ๋ฌผ๋ฆฌ์—”์ง„์—์„œ ํ•˜๋Š” broad phase์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•ด์ค€๋‹ค๊ณ  ๋ณผ์ˆ˜ ์žˆ์Œ.

๊ทธ๋ƒฅ 1600๊ฐœ์˜ ํƒ€์ผ์„ ๊ณ„์‚ฐ ํ•˜๋Š”๊ฒƒ๋ณด๋‹ค

๋จผ์ € 100๊ฐœ ์”ฉ ํฐ๋ฉ์–ด๋ฆฌ๋กœ ๋ฌถ์–ด์„œ 16๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ฑฐ๊ธฐ์„œ 10๊ฐœ, 10๊ฐœ ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค๊ฑฐ๋‚˜,

100๊ฐœ๋ฅผ ๊ณ„์‚ฐ ํ•˜๋Š”์‹์œผ๋กœ ํ•˜๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” 4๋ฐฐ์ •๋„ ์˜ฌ๋ผ๊ฐ€๋”๋ผ๋„ (๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ํ•„์š” ํ•˜๋‹ค๋Š”๊ฒƒ์ž„)

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํ˜„์ €ํžˆ ์ค„์ผ์ˆ˜ ์žˆ์Œ.



๋งˆ์ดํฌ๋กœ ์ตœ์ ํ™” ํŒ์œผ๋กœ๋Š” ๋ถ€๋™์†Œ์ˆ˜๋“ค double์ด๋‚˜ float์„ ๊ณ„์‚ฐ ํ• ๋•Œ๋Š” * ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์“ฐ๋Š”๊ฒŒ ์ข‹์Œ.

์˜ˆ๋ฅผ ๋“ค์–ด pi = 3.14159 ๋ผ๋Š” ์ˆซ์ž๋ฅผ 2๋กœ ๋‚˜๋ˆ ์•ผ ํ•œ๋‹ค๋ฉด

value = pi / 2.0; ์ด๋ ‡๊ฒŒ ํ•˜๋Š”๊ฒƒ๋ณด๋‹ค

value = pi * 0.5; ์ด๋ ‡๊ฒŒ ํ•˜๋Š”๊ฒŒ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋น ๋ฅด๋‹ค๊ณ  ํ•จ.

๋ฌผ๋ก  ๋งŒ๋“ค์–ด์ง€๋Š” ASM ์ฝ”๋“œ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ๋ฐ, ์–ด์…ˆ๋ธ”๋ฆฌ ๋ ˆ๋ฒจ์—์„œ ์•„๋ž˜ ๋ฐฉ์‹์ด ๋ณ€์ˆ˜ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ•˜๋‚˜ย ๋œ์“ฐ๋Š”๊ฑธ๋กœ ์•Œ๊ณ  ์žˆ์Œ.

์š”์ฆ˜์—” ๋ณ„๋กœ ์‹ ๊ฒฝ ์•ˆ์จ๋„ ๋˜๊ธด ํ•˜์ง€๋งŒ, (์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” /2 ๋ฅผ ํ•˜๋Š”๊ฒŒ ๋น ๋ฅธ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๊ณ  ํ•˜๋‹ˆ;;)

์•„๋ž˜์ชฝ์ด ๋” ๋น ๋ฅด๋‹ค๊ณ  ๋ฐฐ์› ์Œ...ย 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜๋“ค์€ ๋น„ํŠธ ์—ฐ์‚ฐ์ด ์ข€๋” ๋น ๋ฆ„.

์˜ˆ๋ฅผ ๋“ค์–ด 2๋ฅผ ๊ณฑํ•œ๋‹ค๊ณ  ํ• ๋•Œ

int val = 14;

val = val << 1;

์ด๋ ‡๊ฒŒ ํ•˜๋Š”๊ฒŒ *2 ๋ฅผ ์“ฐ๋Š”๊ฒƒ๋ณด๋‹ค ๋น ๋ฆ„.

2๋กœ ๋‚˜๋ˆ„๋Š”ย ๊ฒฝ์šฐ๋Š” >>1๋ฅผ ํ•˜๋Š”๊ฒƒ๋„ ์žˆ๊ณ ...


3์ด๋‚˜ ์ด๋Ÿฐ๊ฑธ ๊ณฑํ• ๋•Œ๋Š” ๊ทธ๋ƒฅ ์“ฐ๋Š”๊ฒŒ ๋‚˜์œผ๋‹ˆ ์ด๋Ÿฐ ๋ฏธ๋ฆฝ์ž ํŒ๋“ค์€ ๋ฌด์‹œํ•ด๋„ ๋จ;;


๋˜ cos, sin์ด๋‚˜ sqrt ๋“ฑ์˜ ์ˆ˜ํ•™ ํ•จ์ˆ˜๋“ค์€ ์ปดํ“จํ„ฐ์—์„œ ํ…Œ์ผ๋Ÿฌ ๊ธ‰์ˆ˜๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐํ•˜๋Š” ๊ฐ’์ธ๋ฐ,

์ด๊ฒŒ ๋˜ ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ๋จน๋Š” ํ•จ์ˆ˜๋“ค์ž„. ์š”๋Ÿฐ๊ฒƒ์ค‘์— ์ž์ฃผ ์“ฐ๋Š” ์ˆซ์ž๋‚˜ ๊ฒฐ๊ณผ๋“ค์€ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด์„œ, ๊ฐ’์œผ๋กœ ์ €์žฅํ•ด๋‘๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Œ.

์†”์งํžˆ ๋งํ•ด์„œ 0๋„ ~ 360๋„์˜ ๊ฒฝ์šฐ๋Š” ์ˆซ์ž๊ฐ€ ํฌ์ง€๋งŒ ๋ผ๋””์•ˆ์œผ๋กœ 0~ 2pi, 6.28 ์ •๋„ ๊นŒ์ง€๋Š” ์˜์™ธ๋กœ ๊ฐ’์ด ํฌ๊ฒŒ ์•ˆ๋А๊ปด์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž„.

์ด๋Ÿด๋•Œ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ ํ•ด๋‘”๊ฑธ ์“ด๋‹ค๋˜์ง€ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Œ. ย 



์†”์งํžˆ ์ด๋Ÿฐ ์ตœ์ ํ™”๋Š” ์ฒ˜์Œ์— ๋งํ•œ 80%์˜ ๋ถ€ํ•˜๊ฐ€ ๋ณ„๋กœ ์•ˆ๊ฑธ๋ฆฌ๋Š” ์ƒํ™ฉ์—์„œ์˜ ์ตœ์ ํ™”์ธ๋ฐ, ์ด๋Ÿฐ๊ฒƒ๋ณด๋‹ค๋Š”

๋ณดํ‹€๋„ฅ์ด ๊ฑธ๋ฆฌ๋Š”๊ณณ์„ ์ตœ์ ํ™” ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ๋ด„.


step 3.ย ์ตœ์ ํ™”๋ฅผ ํ–ˆ์œผ๋ฉด ๋””๋ฒ„๊น…์„ ํ•ด์•ผ ํ•จ.

unit test๋„ ์ข‹์ง€๋งŒ, ์ด๋Ÿด๋•Œ๋Š” ์˜คํ† ๋งคํ‹ฑ ํ…Œ์ŠคํŠธ ๋“ฑ๋“ฑย 

์—ฌํŠผ ์งง์€ ์‹œ๊ฐ„์— ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋Š”๊ฒŒ ์ข‹์Œ.

ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๋„์ค‘์— ์ด์ƒํ•œ ๊ฒฐ๊ณผ๋‚˜, ์›ํ•˜์ง€ ์•Š๋Š” ํฌ๋ž˜์‰ฌ๊ฐ€ ๋‚ ์ˆ˜ ์žˆ์œผ๋‹ˆ;;


๋””๋ฒ„๊น… ํ•˜๋‹ค๋ณด๋ฉด ํž™์—์„œ nbit ์งœ๋ฆฌย ๋ฉ”๋ชจ๋ฆฌ ์ฐพ๋Š”๊ฒŒ ์ œ์ผ ใ…ˆ๊ฐ™์€๊ฑฐ ๊ฐ™์€๋ฐ ์ด๊ฑด ์ง„์งœ ์ž์ฃผ ์ž์ฃผ ์ฐพ์•„๋ด์•ผ ํ•˜๋Š”๊ฑฐ ๊ฐ™๋‹ค...

์ฝ”๋“œ ์„ค๊ณ„ ๋ถ€ํ„ฐ ์ œ๋Œ€๋กœ ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฆญ, ํฌ๋ž˜์‰ฌ, ๋ฒ„๊ทธ์—†๋Š” ๊ฒŒ์ž„์„ ๋งŒ๋“ค์ž... (์ด๊ฑด ๊ฐ€๋Šฅํ•˜๊ธฐ๋Š” ํ•œ๊ฑด์ง€ ๊ถ๊ธˆ ํ•จ...)


๋ฉ”๋ชจ๋ฆฌ ๋ฆญ์„ ๋„์ €ํžˆ ๋ชป์žก๊ฒ ์œผ๋ฉด

1. ๋ฉ”๋ชจ๋ฆฌ ์–ผ๋กœ์ผ€์ดํ„ฐ๋ฅผ ๋งŒ๋“ ๋‹ค.

2. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. (์“ฐ๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด GG ์ถ”์ฒœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค;;)

3. ์ฝ”๋“œ๋ฅผ ๋‹ค ์ง€์šฐ๊ณ  ์ƒˆ๋กœ ์“ด๋‹ค.

4. ๋•Œ๋ ค ์นœ๋‹ค.

์˜ ๋ฐฉ๋ฒ•์ด ์žˆ์Œ. ใ…‹ใ…‹ใ…‹ใ…‹.

ย