λ€μ ν° μ«μ
https://programmers.co.kr/learn/courses/30/lessons/12911
λ¬Έμ
λ¬Έμ λ₯Ό κ³μ μμ κΈΈλ 볡μ¬ν΄λλ€.
λ¬Έμ μ€λͺ
μμ°μ nμ΄ μ£Όμ΄μ‘μ λ, nμ λ€μ ν° μ«μλ λ€μκ³Ό κ°μ΄ μ μ ν©λλ€.
- 쑰건 1. nμ λ€μ ν° μ«μλ nλ³΄λ€ ν° μμ°μ μ λλ€.
- 쑰건 2. nμ λ€μ ν° μ«μμ nμ 2μ§μλ‘ λ³ννμ λ 1μ κ°―μκ° κ°μ΅λλ€.
- 쑰건 3. nμ λ€μ ν° μ«μλ 쑰건 1, 2λ₯Ό λ§μ‘±νλ μ μ€ κ°μ₯ μμ μ μ λλ€.
μλ₯Ό λ€μ΄μ 78(1001110)μ λ€μ ν° μ«μλ 83(1010011)μ λλ€.
μμ°μ nμ΄ λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, nμ λ€μ ν° μ«μλ₯Ό return νλ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
- nμ 1,000,000 μ΄νμ μμ°μ μ λλ€.
μ μΆλ ₯ μ
n | result |
---|---|
78 | 83 |
15 | 23 |
μ μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ#1
λ¬Έμ μμμ κ°μ΅λλ€.
μ
μΆλ ₯ μ#2
15(1111)μ λ€μ ν° μ«μλ 23(10111)μ
λλ€.
μ½λ
#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;
}
νμ΄
μ°μ λ¬Έμ λ₯Ό λ§μ£Όνκ³ μμ νμμΌλ‘ νμ΄μ§λμ§λ₯Ό κ³ λ―Όνλ€. λ³μλ 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 μ¦κ°μμΌμ€¬λ€. μ΄ μ°μ°μ λΉνΈ μ¬ννΈ μ°μ°μΌλ‘λ ꡬνν μ μλ€.
κ²°κ³Ό
μκ°λ³΄λ€ μμ² λΉ λ₯΄κ² μνλλ€;
λ€λ₯Έ μ¬λμ νμ΄
%2 μ°μ°μΌλ‘ 2λ‘ λλ λλ¨Έμ§λ₯Ό μ°Ύκ³ , /2 μ°μ°μΌλ‘ μ¬ννΈλ₯Ό μννλ νμ΄λ μμλ€. λ΄ νμ΄λ₯Ό μμμΌλ‘ λ°κΎΌ νμ΄μ΄λ€.
Comment