๋ค์ ํฐ ์ซ์
1. ๋ฌธ์
1.0.1. ์ ํ ์ฌํญ
1.0.2. ์ ์ถ๋ ฅ ์
1.0.3. ์ ์ถ๋ ฅ ์ ์ค๋ช
2. ์ฝ๋
3. ํ์ด
4. ๊ฒฐ๊ณผ
5. ๋ค๋ฅธ ์ฌ๋์ ํ์ด

๋ค์ ํฐ ์ซ์
https://programmers.co.kr/learn/courses/30/lessons/12911
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋ค์ ํฐ ์ซ์
์์ฐ์ n์ด ์ฃผ์ด์ก์ ๋, n์ ๋ค์ ํฐ ์ซ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ ํฉ๋๋ค. ์กฐ๊ฑด 1. n์ ๋ค์ ํฐ ์ซ์๋ n๋ณด๋ค ํฐ ์์ฐ์ ์ ๋๋ค. ์กฐ๊ฑด 2. n์ ๋ค์ ํฐ ์ซ์์ n์ 2์ง์๋ก ๋ณํํ์ ๋ 1์ ๊ฐฏ์๊ฐ ๊ฐ์ต๋
programmers.co.kr
1. ๋ฌธ์
๋ฌธ์ ๋ฅผ ๊ณ์ ์์ ๊ธธ๋ ๋ณต์ฌํด๋๋ค.
๋ฌธ์ ์ค๋ช
์์ฐ์ n์ด ์ฃผ์ด์ก์ ๋, n์ ๋ค์ ํฐ ์ซ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ ํฉ๋๋ค.
- ์กฐ๊ฑด 1. n์ ๋ค์ ํฐ ์ซ์๋ n๋ณด๋ค ํฐ ์์ฐ์ ์ ๋๋ค.
- ์กฐ๊ฑด 2. n์ ๋ค์ ํฐ ์ซ์์ n์ 2์ง์๋ก ๋ณํํ์ ๋ 1์ ๊ฐฏ์๊ฐ ๊ฐ์ต๋๋ค.
- ์กฐ๊ฑด 3. n์ ๋ค์ ํฐ ์ซ์๋ ์กฐ๊ฑด 1, 2๋ฅผ ๋ง์กฑํ๋ ์ ์ค ๊ฐ์ฅ ์์ ์ ์ ๋๋ค.
์๋ฅผ ๋ค์ด์ 78(1001110)์ ๋ค์ ํฐ ์ซ์๋ 83(1010011)์ ๋๋ค.
์์ฐ์ n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, n์ ๋ค์ ํฐ ์ซ์๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
1.0.1. ์ ํ ์ฌํญ
- n์ 1,000,000 ์ดํ์ ์์ฐ์ ์ ๋๋ค.
1.0.2. ์ ์ถ๋ ฅ ์
n | result |
---|---|
78 | 83 |
15 | 23 |
1.0.3. ์ ์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์#1
๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์
์ถ๋ ฅ ์#2
15(1111)์ ๋ค์ ํฐ ์ซ์๋ 23(10111)์
๋๋ค.
2. ์ฝ๋
#include <string>
#include <vector>
using namespace std;
int numOfOne(int x){
int i = 1;
int num=0;
while(i<=x){
if((x & i)!=0){ // ํด๋น ์๋ฆฟ์๊ฐ 1์ด๋ฉด
num++;
}
i*=2;
}
return num;
}
int solution(int n) {
int answer = 0;
int cmp = numOfOne(n);
answer = cmp;
for(int i=n+1; i<=1000000; i++){
if(numOfOne(i)==cmp){
answer = i;
break;
}
}
return answer;
}
3. ํ์ด
์ฐ์ ๋ฌธ์ ๋ฅผ ๋ง์ฃผํ๊ณ ์์ ํ์์ผ๋ก ํ์ด์ง๋์ง๋ฅผ ๊ณ ๋ฏผํ๋ค. ๋ณ์๋ n๋ฐ์ ์๊ณ ๋ฒ์๊ฐ 10^6์ด๋, O(n)์ด๋ O(nlgn)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ์์ ํ์์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
์์ ํ์์ผ๋ก ์๊ฐํด๋ณด๋ฉด ์ฃผ์ด์ง n๋ณด๋ค 1ํฐ n+1๋ถํฐ n์ ์ต๋ ๊ฐ์ธ 1,000,000๊น์ง ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ณด๋ฉด์ ํด๋น ์๊ฐ 2์ง๋ฒ์ผ๋ก ๋ํ๋์ ๋, n๊ณผ ๊ฐ์ 1์ ๊ฐ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ ๋ต์ ๋ด๋ ์์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ค.
ํด๋น ์๊ฐ n๊ณผ ๊ฐ์ 1์ ๊ฐฏ์๋ฅผ ๊ฐ์ง๊ณ ์๋์ง๋ ์ด๋ป๊ฒ ์ ์ ์์๊น? ๋๋ ๋จ์ํ๊ฒ 1์ ๊ฐฏ์๋ฅผ ๋ชจ๋ ์ธ์ด๋ณด๋ ๋ฐฉ๋ฒ์ ํํ๋ค. ์ด ๊ณผ์ ์์ ๋นํธ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ & ์ฐ์ฐ์ผ๋ก 1์ ์๋ฅผ ์ธ์๋ค.

while(i<=x){
if((x & i)!=0){ // ํด๋น ์๋ฆฟ์๊ฐ 1์ด๋ฉด
num++;
}
i*=2;
}
์ด๋ ๊ฒ i๊ฐ x๋ณด๋ค ํฌ์ง ์์๋๊น์ง, i๋ฅผ 2์ฉ ๊ณฑํด์ฃผ๋ฉฐ &์ฐ์ฐํ๋ค. ์ด ๊ฒฐ๊ณผ๊ฐ 0์ด ์๋๋ฉด ํด๋น ์๋ฆฟ์๋ 1์ด๋ผ๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ num์ 1 ์ฆ๊ฐ์์ผ์คฌ๋ค. ์ด ์ฐ์ฐ์ ๋นํธ ์ฌํํธ ์ฐ์ฐ์ผ๋ก๋ ๊ตฌํํ ์ ์๋ค.
4. ๊ฒฐ๊ณผ

์๊ฐ๋ณด๋ค ์์ฒญ ๋น ๋ฅด๊ฒ ์ํ๋๋ค;
5. ๋ค๋ฅธ ์ฌ๋์ ํ์ด
%2 ์ฐ์ฐ์ผ๋ก 2๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ฐพ๊ณ , /2 ์ฐ์ฐ์ผ๋ก ์ฌํํธ๋ฅผ ์ํํ๋ ํ์ด๋ ์์๋ค. ๋ด ํ์ด๋ฅผ ์ญ์์ผ๋ก ๋ฐ๊พผ ํ์ด์ด๋ค.
Comment