문제 URL : https://programmers.co.kr/learn/courses/30/lessons/77885
문제 접근법 :
홀수와 짝수인경우로 나눴습니다.
우선 쉽게 짝수인경우 비트가 마지막 비트가 0이됩니다.
1개만 큰수중에서 비트가 한개만달라도 되기때문에 마지막 비트에 1을 추가하면 되기때문에 짝수+1이 되빈다.
그렇다면 홀수인경우엔 규칙을 찾아보면
첫 0이나오는 비트에서 1을 추가한후 그뒤에있는 비트를 제거하면 답이됩니다.
1개또는 2개가 다른결과가 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <bits/stdc++.h>
using namespace std;
vector<long long> solution(vector<long long> numbers) {
vector<long long> answer;
for (long long num : numbers) {
if (num % 2 == 0) {
answer.push_back(num + 1);
continue;
}
long long num2 = ~num;
long long idx = log2(num2 & -num2);
answer.push_back(num + (1L << idx) - (1L << (idx - 1)));
}
return answer;
}
|
cs |
궁금한점 혹은 모르는점 언제든지 댓글은 환영입니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 행렬의 곱셈 (0) | 2021.07.30 |
---|---|
프로그래머스 미로 탈출 (2021 카카오 채용연계형 인턴십) (2) | 2021.07.28 |
프로그래머스 124 나라의 숫자 (0) | 2021.07.28 |
프로그래머스 큰 수 만들기 (0) | 2021.07.25 |
프로그래머스 징검다리 (0) | 2021.07.25 |