반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/77885
문제
풀이,코드
2개 이하로 다른 비트
x보다 크고 x와 비트가 1~2개 다른 수들중에서 가장 작은수
만약 짝수라면? 그냥 맨 뒤에 + 1을 하고 return 왜냐? 더 커야해서
음 그냥 0이 나올때까지에 대해서 계속 비트를 밀어(*2를한다) 근데 0이 나온다? -> break
그리고 break된 bit 2로 나눠
1010111 일때 bit는 그럼 8이 되는거지
1010111 + 1000을하면? -> 10101111이 되어서 가장 낮은 x보다 큰 수가 나오게 됩니다.
만약 11111이라면? bit가 32가 되고 11111 + 10000 -> 101111이 되어서 만족하는겁니다.
즉, 짝수는 +1을 하면 끝 / 홀수는 0이나올때까지 *2를 한 후 0을 만날때 나오게 되어 answers[i]와 더한다.
#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 *= 2;
}
bit /= 2;
answer.push_back(numbers[i] + bit);
}
}
return answer;
}
반응형
'알고리즘 > c++ 프로그래머스' 카테고리의 다른 글
[프로그래머스 롤케이크 자르기] c++ (풀이, 코드) (0) | 2023.06.07 |
---|---|
[프로그래머스 숫자 변환하기] c++ (풀이,코드,bfs) (0) | 2023.06.06 |
[프로프래머스 2*n타일링] c++ (코드,풀이) (0) | 2023.06.04 |
[프로그래머스 뒤에 있는 큰 수 찾기] c++ (코드, 풀이, 스택) (0) | 2023.06.02 |
[프로그래머스 파일명정렬] c++ (풀이,코드,카카오3차코테) (0) | 2023.06.01 |
댓글