본문 바로가기
Develop/백준 (python)

[백준] 18917번: 수열과 쿼리 38 (python)

by Tarra 2022. 4. 7.

18917번: 수열과 쿼리 38


문제 )

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

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

 

 

입력 :

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

 

 

 

출력 :

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

 

 

제한:
1 ≤ M ≤ 500 000
1 ≤ x ≤ 1 000 000 000
3번 혹은 4번 쿼리가 적어도 하나 주어진다.

 

 

 

 

 

풀이)

배열을 만드는 것보다 직접 계속 더해주는 것이 실행시간을 줄일 수 있다.

파이썬에서의 xor연산은 ^으로 처리해주면 된다.

 

+ xor연산은 둘중 하나가 참일때 만족이므로 

어떠한 숫자 x와 0을 xor을 하게 되면 자기 자신인 x가 나오게 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
li = [0]
= int(sys.stdin.readline().strip())
 
total = 0
xor = 0
for i in range(m):
    a = list(map(int, sys.stdin.readline().strip().split()))
    if a[0== 1:
        total += a[1]
        xor = xor ^ a[1]
    elif a[0== 2:
        total -= a[1]
        xor = xor ^ a[1]
    elif a[0== 3:
        print(total)
    elif a[0== 4:
        print(xor)
cs
 

출처 : 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