알고리즘/백준
BOJ 1322 X와 K / C++
내이름은 킹햄찌
2022. 9. 15. 21:03
https://www.acmicpc.net/problem/1322
1322번: X와 K
첫째 줄에 X와 K가 주어진다. X와 K는 2,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
아이디어
문제에서 제시한 X + Y = X | Y를 만족하는 Y의 값은 X를 이진으로 표현했을때 1에 해당하는 비트가 곂치지 않고 0에 해당하는 비트만 1인 숫자를 찾아야 합니다.
예를 들어 5는 101 이다. 조건을 만족하는 숫자는 10 또는 1000, 1010 이 된다. 이를 바탕으로 풀이했습니다.
#include <iostream>
using namespace std;
long long X, Y, K;
void input() {
cin >> X >> K;
}
void solution() {
int pushCnt = 0;
//long long -> bit : 8byte * 8 = 64
for (int i = 0; i < 65; i++) {
//1bit가 아닌 자리의 bit를 더해야 함
if ((X >> i) & 1) continue;
if ((K >> pushCnt) & 1) {
Y |= (1LL << i);
}
pushCnt++;
}
cout << Y;
}
int main(void) {
input();
solution();
}