์˜ค๋‹ต๋…ธํŠธ
ย - Last update: 2023-05-12

Low level

์•Œ๊ฒŒ ๋ชจ๋ฅด๊ฒŒ ์ •๋ง ์ถ”์ƒํ™”๋ž€ ๊ฐ•๋ ฅํ•œ ํž˜์„ ๋ถ€์—ฌํ•œ๋‹ค. ํŠนํžˆ ์ปดํ“จํ„ฐ์˜ ๊ฒฝ์šฐ low level์—์„œ๋Š” ํŠธ๋žœ์ง€์Šคํ„ฐ๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„์ฑ„๊ธฐ ์ •๋ง ์–ด๋ ต๋‹ค. ๊ทธ๋ฆฌ๊ณ  low level์€ ๋‹ค ์ฑ™๊ธฐ๊ธฐ์—” ๊ท€์ฐฎ๊ธฐ๋„ ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๊ธฐ์— ์‹œ๊ฐ„๋„ ๋งŽ์ด ์†Œ์š”๋˜๊ณ ..

๋‚˜๋„ javascript์™€ ๊ฐ™์ด ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” high level์˜ ๊ฐœ๋ฐœ์„ ์„ ํ˜ธํ•˜๋Š” ํŽธ์ด์ง€๋งŒ, low level๊นŒ์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ฐ€๋”์”ฉ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ์‰ฝ๊ฒŒ ๋ˆˆ์น˜์ฑ„๊ธฐ ์–ด๋ ต๋‹ค.

์˜ค๋Š˜ ์ €์ง€๋ฅธ ์‹ค์ˆ˜ ํ•œ๊ฐ€์ง€๋ฅผ ๊ณต์œ ํ•ด๋ณธ๋‹ค.

for (unsigned int i = 0; i <= 0xFFFFFFFFU; ++i) {
validation(i);
}

์œ„ ๋กœ์ง์€ ์ž‘์„ฑ์ž๊ฐ€ ์˜๋„ํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด 0 ์—์„œ 0xFFFFFFFFU ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๊ณ  ์ข…๋ฃŒ๋  ๊ฒƒ์ด๋‹ค. ๊ณผ์—ฐ ๊ทธ๋Ÿด๊นŒ?

๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ง€์ ์€ 0xFFFFFFFFU ๋‹ค์Œ์˜ ์ˆซ์ž์ด๋‹ค. 0xFFFFFFFFU ๋‹ค์Œ์˜ ์ˆซ์ž๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? ์—ฌ๊ธฐ์„œ ์•„์ฐจ ์‹ถ์—ˆ๋‹ค. ๋‚˜๋„ ๋ชจ๋ฅด๊ฒŒ for ๋ฌธ์„ ์ถ”์ƒํ™” ํ•ด์„œ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ. ์‚ฌ์‹ค ์œ„ ๋กœ์ง์€ i ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด์„œ ๋น„๊ต๋ฅผ ํ•˜๊ณ  ์žˆ์„ ๋”ฐ๋ฆ„์ด๋‹ค.

overflow๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— 0xFFFFFFFFU + 1U = 0 ์ด๋‹ค. ์ฆ‰, ์œ„ ๋ฃจํ”„๋Š” ์–ผํ• ๋ณด๋ฉด ์•ฝ 42์–ต๋ฒˆ ๋™์ž‘ํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง„๋‹ค. ์ž ์‹œ๋‚˜๋งˆ ๊ณจ๋จธ๋ฆฌ ์ฉํ˜”๋˜ ๋ฌธ์ œ๊ณ , ์•Œ๊ณ ๋‚˜๋ฉด ๋ณ„ ๋ฌธ์ œ ์•„๋‹Œ๋ฐ, ์•Œ๊ณ ๋‚˜๋ฉด ๊น€์ƒŒ๋‹ค. ์ด๋Ÿฐ ์ผ ์—†๋„๋ก low level์˜ ๊ณต๋ถ€๋ฅผ ๊ฒŒ์„๋ฆฌ ํ•ด์„œ๋Š” ์•ˆ๋  ๊ฑฐ ๊ฐ™๋‹ค.

๋‚ด์‹ค์„ ๋‹ค์ง€์ž

์ƒ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ‘ผ๋‹ค๊ณ  ํ•ด์„œ ์ž๋™์ ์œผ๋กœ ๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•„๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ตœ๊ทผ์—๋„ MST ๋ผ๋Š” ๊ฒƒ์˜ ๊ฐœ๋…์„ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ณ (์ด๋ฆ„์€ ๋“ค์–ด๋ดค๋‹ค ํ–ˆ์„์ง€๋ผ๋„), ๊ทธ๋ž˜ํ”„์—์„œ์˜ cycle์„ ์–ด๋–ป๊ฒŒ ์‰ฝ๊ฒŒ ํŒ์ •ํ•˜๋Š”์ง€๋„ ์•Œ๊ฒŒ ๋๋‹ค. Union Find์˜ ์ฒซ ํ™œ์šฉ ์˜ˆ๋ฅผ ์•Œ๊ฒŒ ๋๋‹ค๊ณ  ํ•ด์•ผํ•˜๋‚˜.. ๊ฐœ๋ฐœ์„ ์ข‹์•„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„ ๋ฌธ์ œ์— ๊ฐ•ํ•œ ๋А๋‚Œ์ธ๋ฐ ์ด๊ฒƒ ๋ง๊ณ ๋„ ๋‹ค ์ž˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๊ฒƒ์ด ํ”„๋กœ๋‹ˆ๊นŒ.. (์˜ค๊ธ€์˜ค๊ธ€)