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]
m = 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
'Develop > 백준 (python)' 카테고리의 다른 글
[백준] 1931번: 회의실 배정 (python) (0) | 2022.04.07 |
---|---|
[백준] 5525번: IOIOI (python) (0) | 2022.04.07 |
[백준] 12865번: 평범한 배낭 (python) (0) | 2022.04.06 |
[백준] 11123번: 양 한마리... 양 두마리... (python) (0) | 2022.04.06 |
[백준] 11055번: 가장 큰 증가 부분 수열 (python) (0) | 2022.04.06 |