문제 링크
https://programmers.co.kr/learn/courses/30/lessons/77885?language=cpp
C++ 풀이
#include <string>
#include <vector>
#include <cmath>
using namespace std;
vector<long long> solution(vector<long long> numbers) {
vector<long long> answer;
for (long long i = 0; i < numbers.size(); i++) {
long long num = numbers[i];
long long temp = num;
int pos = 0;
//짝수인 경우 +1
if (num % 2 == 0) {
answer.push_back(num + 1);
continue;
}
//맨 앞이 0인 자리 찾기
while ((temp & 1) == 1) {
temp = temp >> 1;
pos++;
}
//홀수인 경우 맨 앞자리 0을 1로, 그 다음 오른쪽 자리 1을 0으로 바꿔줌
num += pow(2, pos) - pow(2, pos - 1);
answer.push_back(num);
}
return answer;
}
비트 연산을 응용한다기 보다는 규칙을 찾아서 풀었다.
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[프로그래머스] 부족한 금액 계산하기 (0) | 2021.09.08 |
---|---|
[프로그래머스] 표 편집 (0) | 2021.08.25 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.08.12 |
[SWEA 7854] 최약수 (0) | 2021.07.21 |
[프로그래머스] 거리두기 확인하기 (0) | 2021.07.15 |