-- 예전 기록/BOJ

[ BOJ ] 18917 : 수열과 쿼리 38 ( SILVER 3 ) / Python

rejo 2024. 2. 6. 21:23

>> 문제 바로가기 (https://www.acmicpc.net/problem/18917)

문제

처음에 0이 하나 포함되어있는 배열 A가 있다. 이때, 다음 쿼리를 수행해야 한다.

  • 1 x: A의 가장 뒤에 x를 추가한다.
  • 2 x: A에서 x를 제거한다. A에 x가 두 개 이상 있는 경우에는 가장 앞에 있는 하나만 제거한다. 항상 A에 x가 있는 쿼리만 주어진다.
  • 3: A에 포함된 모든 원소를 더한 값을 출력한다.
  • 4: A에 포함된 모든 원소를 XOR한 값을 출력한다.

입력

첫째 줄에는 쿼리의 개수 M이 주어진다. 둘째 줄부터 다음 M 개의 줄에 쿼리가 주어진다.

출력

3번 혹은 4번 쿼리가 등장할 때마다, 답을 한 줄에 하나씩 출력한다.

풀이 과정

합을 누적시키는 변수 하나와, XOR을 누적시키는 변수 하나를 만들어 관리한다.

2번 쿼리를 수행할 땐 누적된 합에서 x 원소를 지우면 되고, 누적된 XOR에서 다시 한 번 XOR 을 하면 제외된다. ( XOR의 성질 -> A ^ A = 0 )

import sys
input = sys.stdin.readline

sums = 0
xors = 0

m = int(input().rstrip())
for _ in range(m):
    order = list(map(int, input().rstrip().split()))
    if order[0] == 1:
        sums += order[1]
        xors ^= order[1]
    elif order[0] == 2:
        sums -= order[1]
        xors ^= order[1]
    elif order[0] == 3:
        print(sums)
    else:
        print(xors)