문제 풀이

수열과 쿼리 38 [BOJ 18917]

unordered_map 2022. 2. 18. 11:26

실버도 문제다!

 

문제 요약

처음에 0이 하나 포함되어있는 배열 A에서 다음 4가지 쿼리를 수행한다.

1 x : 수열 맨 뒤에 x 추가

2 x : 수열에서 가장 앞에 있는 x 하나 제거

3 : 수열 원소 합 출력

4 : 수열 원소 XOR 출력

 

사용 알고리즘

없음

 

풀이

XOR의 성질에 따라 a^b^c^...^z에서 a^b^c^...^y를 구하고 싶으면 (a^b^c^...^z)^z를 하면 된다. XOR은 교환법칙과 결합법칙이 모두 성립하기 때문이다. 따라서 1, 2번 연산을 하면서 수열 원소 합/수열 원소 XOR을 관리해줄 수 있고, 출력만 하면 된다. 1번 쿼리에서 '맨 뒤에 추가', 2번 쿼리에서 '가장 앞에 있는 것 하나 제거'와 같은 내용은 문제를 거창하게 만들기 위한 도구이니 가볍게 무시해주자.

 

코드

더보기
#include <stdio.h>
int main()
{
    long long c=0, d=0;
    int query, q, x;
    scanf ("%d", &query);
    while (query--) {
        scanf ("%d", &q);
        if (q==1) {
            scanf ("%d", &x);
            c+=x, d^=x;
        }
        if (q==2) {
            scanf ("%d", &x);
            c-=x, d^=x;
        }
        if (q==3) printf("%lld\n", c);
        if (q==4) printf("%lld\n", d);
    }
}

 

https://unorderedmap.tistory.com/13

 

1일 1수쿼 기록장

수쿼란? - "수열과 쿼리"의 줄임말 - BOJ에는 "수열과 쿼리 1"부터 시작하여 "수열과 쿼리 40"까지 다양한 수쿼 문제가 있다. ("수열과 쿼리 0", "수열과 쿼리 1.5", "수열과 시프트 쿼리", "하이퍼 수열

unorderedmap.tistory.com

 

'문제 풀이' 카테고리의 다른 글

수열과 쿼리 6 [BOJ 13548]  (0) 2022.02.19
수열과 쿼리 1.5 [BOJ 17410]  (0) 2022.02.19
수열과 쿼리 5 [BOJ 13547]  (0) 2022.02.17
수열과 쿼리 18 [BOJ 14504]  (0) 2022.02.16
수열과 쿼리 23 [BOJ 16979]  (0) 2022.02.13