Game Develop

[Algorithm] Programmers :: 2개 이하로 다른 비트 본문

Algorithm/Programmers

[Algorithm] Programmers :: 2개 이하로 다른 비트

MaxLevel 2023. 6. 4. 22:12

https://school.programmers.co.kr/learn/courses/30/lessons/77885

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vector<long long> solution(vector<long long> numbers) 
{
    vector<long long> answer;
 
    for (int i = 0; i < numbers.size(); ++i)
    {
        bitset<100> bt = numbers[i];
 
        for (int i = 0; i < bt.size(); ++i)
        {
            if (bt[i] == 0
            {
                bt[i] = 1;
                if (i > 0) bt[i - 1= 0;
 
                break;
            }
        }
 
        answer.push_back(bt.to_ullong());
    }
    
    return answer;
}
cs

주어진 값을 먼저 bitset을 이용해서 다루기 편하게 만든다음, 탐색하는 도중에 처음만난 0을 1로바꾸고 그 오른쪽값을 1로 바꾸는것이다.

 

예를들어 0111이 있다면, 먼저 처음만난 0인 제일 첫번째 0을 1로바꾼다. 그러면 1111이된다.

그리고 바꾼곳의 오른쪽의 1을 0으로 바꾼다. 그러면 1011이 된다.

 

이게 최솟값이 된다.