본문 바로가기

백준/C++

[Baekjoon/C++] 32290번 - MEX vs OR

[백준] Baekjoon Online Judge

문제로 이동

 

문제

음이 아닌 정수로 구성된 수열 가 주어질 때, 함수  포함되지 않은 가장 작은 음이 아닌 정수를 의미합니다.

에 수열을 대입한 예시에는 다음이 있습니다.

음이 아닌 두 정수 가 주어질 때, 의 비트 OR이라고 부르며, 다음의 규칙에 따라 정의합니다.

  • 2진법에서   적어도 하나의 번째 자리가 이라면 x|y 번째 자리가 입니다.
  • 2진법에서  둘 모두 번째 자리가 이라면 x|y 번째 자리가 입니다.

두 정수의 비트 OR을 구한 예시에는 다음이 있습니다.

l <= r을 만족하는 음이 아닌 세 정수 , , 가 주어집니다. 여러분은 다음 수식의 값을 구해야 합니다.

 

입력

한 줄에 세 정수 , , 가 공백으로 구분되어 주어집니다. (, )

 

출력

한 줄에 문제의 정답을 출력합니다.

 


풀이

#include <iostream>
using namespace std;

bool arr[1000000];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int l, r, x;
    cin >> l >> r >> x;

    for (int i = l; i <= r; i++) arr[i | x] = true;

    for (int i = 0; ; i++) {
        if (!arr[i]) {
            cout << i << '\n';
            break;
        }
    }

    return 0;
}

 l | x부터 r | x까지의 답을 arr에 표시하고, for문을 통해 가장 왼쪽에 있는 표시되지 않는 칸을 찾아 출력한다.