https://www.acmicpc.net/problem/1322
1322번: X와 K
첫째 줄에 X와 K가 주어진다. X와 K는 2,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
[난이도] Gold4
[유형] 비트마스크
[풀이]
X + Y = X | Y 를 만족하기 위해서는
Y를 2진수로 표현했을 때의 1은 X의 2진수가 0인 비트에만 넣을 수 있다. (반올림이 발생하기 때문에)
그러므로 K를 2진수로 표현했을 때의 비트를 하나씩 Y에서 비트가 0인 부분에 채워넣고, Y에서 비트가 1인 부분에는
0을 채워넣은 값이 정답이다.
#include <cstdio> using ll = long long; ll X,K,ret; int main(){ scanf("%lld%lld",&X,&K); int j=0; for(int i=0;;i++){ if(!((X>>i)&1)){ ret |= ((K>>j)&1) << i; j++; if(!(K>>j)) break; } } printf("%lld",ret); }
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/1322.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 20040 : 사이클게임 (C++) (0) | 2021.02.06 |
---|---|
[BOJ/백준][Gold4] 16172 : 나는 친구가 적다(large) (C++) (0) | 2021.02.06 |
[BOJ/백준][Gold4] 9007 : 카누 선수 (C++) (0) | 2021.02.06 |
[BOJ/백준][Gold4] 3671 : 산업 스파이의 편지 (C++) (0) | 2021.01.31 |
[BOJ/백준][Gold4] 18119 : 단어 암기 (C++) (0) | 2021.01.31 |