์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜

2. [c++] ํŠน์ •๊ฐ’ ์ดํ•˜์˜ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋งŒ๋“ค๊ธฐ

Rainbow๐ŸŒˆCoder 2021. 9. 18. 17:42
728x90

*์ง์ ‘ ์ง  ๊ฒƒ์ž„์œผ๋กœ ๋ชฉ์ ์— ๋ณด๋‹ค ๋” ์ตœ์ ์ธ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.*

 


- ํŠน์ •๊ฐ’ n์„ ์ž์œ ๋กญ๊ฒŒ ์ž…๋ ฅํ•˜๋ฉด,

- n ์ดํ•˜์˜ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ๋งŒ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

์˜ˆ์‹œ)

100์ž…๋ ฅ์‹œ 64 ์ถœ๋ ฅ

2์ž…๋ ฅ์‹œ 2์ถœ๋ ฅ

1์ž…๋ ฅ์‹œ 1์ถœ๋ ฅ

2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „ (wikipedia.org)

 


#include <iostream>
using namespace std;
int func(int* n)
{
     int max =1;
     for (int i = 1; i * 2 <= *n; i *= 2)
     {
          max = i * 2;
     }
     return max;
}
int main()
{
     int n = 0;
     cin >> n;
     while (n < 1)
     {
         cin >> n;
     }
     int* a = &n;
     n = func(a);
     cout << n << endl;
     return 0;
}


๊ฐ€์žฅ ์‹ ๊ฒฝ์“ด ๋ถ€๋ถ„์€ max์— ๋“ค์–ด๊ฐˆ i๊ฐ’์ด ์• ์ดˆ์— 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ์ˆ˜๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก

for๋ฌธ์˜ ์ฆ๊ฐ์‹์„ i *= 2๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ 

๋งค๋ฒˆ max์— ์ƒˆ๋กœ์ด i *2๋ฅผ ๋„ฃ์–ด์„œ ๋งˆ์ง€๋ง‰์—๋Š” ๊ฐ€์žฅ ํฐ ๊ฑฐ๋“ญ์ œ๊ณฑ ์ˆ˜๋กœ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  1๋˜ํ•œ 2์˜ 0 ์ œ๊ณฑ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถœ๋ ฅ๊ฐ’์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก int max ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”๋ฅผ 1;๋กœ ํ•ด์ฃผ๊ณ 

main ํ•จ์ˆ˜์—์„œ 1 ๋ฏธ๋งŒ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋„๋ก ๋ง‰์•˜๋‹ค.

 

int func(int* n)
{
     int max =1;
     while(max * 2 <= *n) max *= 2;
     return max;
}

ํ•จ์ˆ˜ ๋ถ€๋ถ„์„ ์œ„์™€ ๊ฐ™์ด ์จ๋„ ๋ฌด๋ฐฉํ–ˆ๋‹ค.

728x90