๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

[์ด์ง„ ํƒ์ƒ‰] int mid = left + (right - left) / 2; ๋ณธ๋ฌธ

๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/๊ธฐ์–ตํ•ด๋‘˜ ๊ฒƒ

[์ด์ง„ ํƒ์ƒ‰] int mid = left + (right - left) / 2;

9taetae9 2025. 2. 1. 15:50
728x90

์ด์ง„ ํƒ์ƒ‰์€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํŠน์ • ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ๊ฒ€์ƒ‰ ๋ฒ”์œ„๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ณผ์ •์—์„œ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค(mid)๋ฅผ ๊ณ„์‚ฐ์„ ๋‹จ์ˆœํ•˜๊ฒŒ (left + right) / 2๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์˜ ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค.

๊ฒฐ๋ก ๋งŒ ๋จผ์ € ๋งํ•˜๋ฉด, int mid = left + (right - left) / 2; ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•œ๋‹ค.


1. ๊ธฐ๋ณธ์ ์ธ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค mid ๊ณ„์‚ฐ ๋ฐฉ์‹

์ด์ง„ ํƒ์ƒ‰์—์„œ๋Š” ๊ฒ€์ƒ‰ ๋ฒ”์œ„์˜ ์–‘ ๋ ์ธ๋ฑ์Šค์ธ left์™€ right๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

int mid = (left + right) / 2;

์ด ๋ฐฉ์‹์€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, left์™€ right๊ฐ€ ๋งค์šฐ ํฐ ๊ฐ’์ผ ๊ฒฝ์šฐ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


2. ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ

์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ๊ฐ’์ด ํ‘œํ˜„๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, int ํƒ€์ž…์€ ์ผ๋ฐ˜์ ์œผ๋กœ -2,147,483,648๋ถ€ํ„ฐ 2,147,483,647๊นŒ์ง€์˜ ๊ฐ’์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,
๋งŒ์•ฝ left์™€ right๊ฐ€ ๋ชจ๋‘ ํฐ ๊ฐ’์ด๋ฉด, ์ด ๋‘ ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ด ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, left = 2,000,000,000์ด๊ณ  right = 2,000,000,010์ธ ๊ทน๋‹จ์ ์ธ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด๋ฉด,

  • (left + right)์˜ ๊ฐ’์€ 4,000,000,010์ด ๋˜๊ณ , ์ด๋Š” int ํƒ€์ž…์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€๊ฐ’ 2,147,483,647๋ฅผ ํ›จ์”ฌ ์ดˆ๊ณผํ•œ๋‹ค.
  • ์ด๋Ÿฐ ๊ฒฝ์šฐ, ์ž˜๋ชป๋œ ๊ณ„์‚ฐ์ด ๋˜์–ด ์˜ฌ๋ฐ”๋ฅธ mid ๊ฐ’์ด ๋„์ถœ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ๊ฐœ์„ ๋œ mid ๊ณ„์‚ฐ ๋ฐฉ์‹: left + (right - left) / 2

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด ๋ฐ”๋กœ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

int mid = left + (right - left) / 2;
  • (right - left): ์ด ๊ฐ’์€ ํ•ญ์ƒ ๋ฐฐ์—ด ๋‚ด์˜ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ๋งค์šฐ ๋‚ฎ๋‹ค.
  • left + ...: left ๊ฐ’์— (right - left)์˜ ์ ˆ๋ฐ˜ ๊ฐ’์„ ๋”ํ•˜๋ฏ€๋กœ, ์‹ค์ œ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

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

 

์ •๋ฆฌ

์ด์ง„ ํƒ์ƒ‰์—์„œ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ, ๋‹จ์ˆœํžˆ (left + right) / 2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์˜ ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค.

int mid = left + (right - left) / 2; ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋ฉด ๋ณด๋‹ค ์•ˆ์ •์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90