λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm πŸ§‘πŸ»‍πŸ’»/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€(Programmers)

[c++] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - λ‹€μŒ 큰 숫자(Level 2)

by μ•ˆμ£Όν˜• 2022. 4. 18.

문제

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - λ‹€μŒ 큰 숫자

μžμ—°μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, n의 λ‹€μŒ 큰 μˆ«μžλŠ” λ‹€μŒκ³Ό 같이 μ •μ˜ ν•©λ‹ˆλ‹€. 쑰건 1. n의 λ‹€μŒ 큰 μˆ«μžλŠ” n보닀 큰 μžμ—°μˆ˜ μž…λ‹ˆλ‹€. 쑰건 2. n의 λ‹€μŒ 큰 μˆ«μžμ™€ n은 2μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œ 1의 κ°―μˆ˜κ°€ κ°™μŠ΅λ‹ˆ

programmers.co.kr

 

μ½”λ“œ

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string binary(int n){
    string bit = "";
    while(n!=0){
        bit+= to_string(n%2);
        n/=2;
    }
    reverse(bit.begin(), bit.end());
    return bit;
}

int one_check(string bit){
    int cnt = 0;
    for(char c : bit){
        if(c=='1') cnt++;
    }
    return cnt;
}

int solution(int n) {
    int answer = 0;
    int one_cnt = 0;
    string n_bit = binary(n);
    one_cnt = one_check(n_bit);
    
    while(true){
        n+=1;
        string temp = binary(n);
        int temp_one_cnt = one_check(temp);
        if(one_cnt==temp_one_cnt){
            answer = n;
            break;
        } 
    }
    return answer;
}

 

풀이(9λΆ„)

κ·Έλƒ₯ μƒκ°λ‚˜λŠ” λŒ€λ‘œ μ­‰μ­‰ 써 λ‚΄λ €κ°”μŠ΅λ‹ˆλ‹€.

  • 쑰건 1. n의 λ‹€μŒ 큰 μˆ«μžλŠ” n보닀 큰 μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • 쑰건 2. n의 λ‹€μŒ 큰 μˆ«μžμ™€ n은 2μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œ 1의 κ°œμˆ˜κ°€ κ°™μŠ΅λ‹ˆλ‹€.
  • 쑰건 3. n의 λ‹€μŒ 큰 μˆ«μžλŠ” 쑰건 1, 2λ₯Ό λ§Œμ‘±ν•˜λŠ” 수 쀑 κ°€μž₯ μž‘μ€ μˆ˜μž…λ‹ˆλ‹€.

 μ‘°κ±΄ 2와 쑰건 3을 λ§Œμ‘±ν•  λ•ŒκΉŒμ§€ n++을 ν•΄κ°€λ©΄μ„œ νƒμƒ‰ν–ˆμŠ΅λ‹ˆλ‹€. 

λŒ“κΈ€