GitHubSeob
C++ / 백준 / 18917 / 수열과 쿼리 38 본문
문제 |
https://www.acmicpc.net/problem/18917
18917번: 수열과 쿼리 38
3번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1, 4]이다. 6번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1, 4, 1]이다. 10번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1]이다.
www.acmicpc.net
문제풀이 |
문제에는 4가지 쿼리가 있다.
1은 추가, 2는 제거, 3, 4는 값을 출력하는 쿼리이다.
문제를 보면 배열의 몇 번째 값을 출력하거나 값이 어디에 있는지 등등 배열이 필요한 경우가 없다.
따라서 값을 더해주는 sum과 xor연산을 하는 XOR의 값만 구하면 된다.
쿼리 1은 sum에 x를 더하면 된다. XOR에 x를 xor연산하면 된다.
쿼리 2는 sum에서 x를 빼면 된다, XOR에 x를 xor연산하면 된다.
쿼리 3은 sum을 출력하면 된다.
쿼리 4는 XOR값을 출력하면 된다.
xor연산은 간단하게 ^을 통해서 가능하다.
xor연산을 두 번 하게 되면 원래의 값이 돌아오므로 쿼리 2는 쿼리 1과 마찬가지로 xor연산을 하면 된다.
문제의 조건에서 x의 최댓값은 1e9이므로 답은 int형을 넘어갈 수 있다.
따라서 long long의 형 변수를 선언하면 된다.
코드 |
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int M(0);
cin >> M;
ll cmd(0), num(0);
ll sum(0), XOR(0);
for (int idx = 0; idx < M; ++idx) {
cin >> cmd;
if (cmd == 1) {
cin >> num;
XOR ^= num;
sum += num;
}
else if (cmd == 2) {
cin >> num;
sum -= num;
XOR ^= num;
}
else if (cmd == 3) {
cout << sum << '\n';
}
else if (cmd == 4) {
cout << XOR << '\n';
}
}
}
'Baekjoon > Silver' 카테고리의 다른 글
C++ / 백준 / 2641 / 다각형그리기 (0) | 2023.09.24 |
---|---|
C++ / 백준 / 1946 / 신입 사원 (0) | 2023.09.21 |
C++ / 백준 / 27165 / 모든 곳을 안전하게 (0) | 2023.09.11 |
C++ / 백준 / 1074 / Z (0) | 2023.07.13 |
C++ / 백준 / 21314 / 민겸 수 (0) | 2023.07.07 |