#1. 문제
#2. 풀이
1. 비트 연산
#include <iostream>
#include <bitset>
int main() {
unsigned int a = 5; // 0101 in binary
unsigned int b = 3; // 0011 in binary
// 10진수를 8비트에서 표현
std::cout << "a = " << std::bitset<8>(a) << std::endl;
std::cout << "b = " << std::bitset<8>(b) << std::endl;
// 왼쪽 시프트 (<<), x2
std::cout << "a << 1 = " << std::bitset<8>(a << 1) << std::endl;
std::cout << "b << 2 = " << std::bitset<8>(b << 2) << std::endl;
// 오른쪽 시프트 (>>), /2
std::cout << "a >> 1 = " << std::bitset<8>(a >> 1) << std::endl;
std::cout << "b >> 1 = " << std::bitset<8>(b >> 1) << std::endl;
// 비트 AND (&), 둘 다 1이면, 1
std::cout << "a & b = " << std::bitset<8>(a & b) << std::endl;
// 비트 OR (|), 둘 중 하나만 1이면, 1
std::cout << "a | b = " << std::bitset<8>(a | b) << std::endl;
// 비트 XOR (^), 서로 다르면 1, 같으면 0
std::cout << "a ^ b = " << std::bitset<8>(a ^ b) << std::endl;
// 비트 NOT (~), 비트 반전
std::cout << "~a = " << std::bitset<8>(~a) << std::endl;
std::cout << "~b = " << std::bitset<8>(~b) << std::endl;
return 0;
}
2. 짝수, 홀수로 나누어 처리
- 짝수일 경우 마지막 비트를 1로 변경해 주기 위해 +1만 해주면 됩니다.
- 홀수일 경우 가장 오른쪽에 위치한 0을 찾아서 1로 바꿔줍니다. 그리고, 바로 오른쪽에 있는 1을 0으로 바꿔줍니다.
#3. 코드
/*
@링크: https://school.programmers.co.kr/learn/courses/30/lessons/77885
@문제: 양의 정수 x에 대하여 주어진 조건을 만족하는 f(x)를 구하는 문제.
@설명
1. x보다 크며 비트가 다른 지점이 2개 이하인 수중 가장 작은 수
*/
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
vector<ll> solution(vector<ll> numbers) {
vector<ll> answer;
for(auto number : numbers)
{
//@짝수일 경우 마지막 비트를 1로 변경
if(number%2 == 0)
{
answer.push_back(number+1);
}
//@홀수일 경우
else
{
//@가장 오른쪽 1을 0으로 바꾼다.
ll bit = 1;
while((number & bit) != 0)
{
//@0만날 때까지 1칸 씩 왼쪽 이동
bit <<= 1;
}
//@바로 오른쪽 비트를 0으로 바꿔준다.
answer.push_back(number + bit - (bit>>1));
}
}
return answer;
}
'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글
[Programmers, C++]#Level2_소수 찾기, 백트래킹, 순열 백트래킹, set, 소수, set 컨테이너 (0) | 2024.08.08 |
---|---|
[Programmers]#Level2_쿼드압축 후 개수 세기, 분할-정복, DFS (0) | 2024.08.02 |
[Programmers, C++]#Level2_파일 명 정렬, #include <cctype> 헤더, sort(), Predicate 함수 (0) | 2024.07.25 |
[Programmers, C++]#Level2_주차 요금 계산, map 컨테이너 (0) | 2024.07.25 |
[Programmers]#Level2_압축, map, string (0) | 2024.07.25 |