-
[프로그래머스/Level 2] 2개 이하로 다른 비트 (C++)알고리즘 문제풀이/프로그래머스 2021. 7. 27. 18:12
https://programmers.co.kr/learn/courses/30/lessons/77885
짝수를 2진법, 비트로 표현했을 때, 가장 오른쪽 비트는 0이 된다. 따라서 +1을 해주면 오른쪽 비트만 1로 변하게 되기 때문에 비트가 총 1개 다르게 된다.
홀수를 비트로 표현하면 가장 오른쪽 비트는 1이 된다. 연속된 비트(1)의 개수가 n개일 때, n-1자리의 비트 수만큼 더하면 f(x) 값이 나오게 된다.
#include <string> #include <vector> using namespace std; vector<long long> solution(vector<long long> numbers) { vector<long long> answer; for(int i = 0; i < numbers.size(); i++) { if(numbers[i] % 2 == 0) answer.push_back(numbers[i] + 1); else { long long bit = 1; while(1) { if((numbers[i] & bit) == 0) break; bit <<= 1; // bit *= 2; } bit >>= 1; // bit /= 2; answer.push_back(numbers[i] + bit); } } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/위클리 챌린지] 2주차 (C++) (0) 2021.08.12 [프로그래머스/위클리 챌린지] 1주차 (C++) (0) 2021.08.12 [프로그래머스/Level 1] 숫자 문자열과 영단어 (C++) (0) 2021.07.26 [프로그래머스/Level 3] 숫자 게임 (C++) (0) 2021.05.07 [프로그래머스/Level 3] 길 찾기 게임 (C++) (0) 2021.05.07