알고리즘/백준

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();
}