1. 문제 설명
처음에 0이 하나 포함되어있는 배열 A가 있다. 이때, 다음 쿼리를 수행해야 한다.
- 1 x: A의 가장 뒤에 x를 추가한다.
- 2 x: A에서 x를 제거한다. A에 x가 두 개 이상 있는 경우에는 가장 앞에 있는 하나만 제거한다. 항상 A에 x가 있는 쿼리만 주어진다.
- 3: A에 포함된 모든 원소를 더한 값을 출력한다.
- 4: A에 포함된 모든 원소를 XOR한 값을 출력한다.
2. 입출력 예
입력
첫째 줄에는 쿼리의 개수 M이 주어진다. 둘째 줄부터 다음 M 개의 줄에 쿼리가 주어진다.
출력
x번째 줄에는 x번째 글을 쓰고 난 후에 메모장에 남아 있는 키워드의 개수를 출력해 주세요.
제한
-
- 1 ≤ M ≤ 500 000
- 1 ≤ x ≤ 1 000 000 000
- 3번 혹은 4번 쿼리가 적어도 하나 주어진다.
예제 입력
<kotlin />
12
1 3
1 1
1 4
3
4
1 1
3
4
2 1
2 4
3
4
예제 출력
<kotlin />
8
6
9
7
4
2
3. 코드
<kotlin />
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
val bw = BufferedWriter(OutputStreamWriter(System.out))
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
var sum = 0L
var xorValue = 0L
repeat(n) {
val command = readLine().split(" ").map { it.toLong() }
when(command[0].toInt()) {
1 -> {
sum += command[1]
xorValue = xorValue xor command[1]
}
2 -> {
sum -= command[1]
xorValue = xorValue xor command[1]
}
3 -> bw.write("$sum\n")
4 -> {
bw.write("$xorValue\n")
}
}
}
bw.flush()
bw.close()
close()
}
4. 풀이
전체 합과 XOR 값을 알아내기 위해 쿼리마다 분기처리를 하여 계산을 진행한다.
1, 2 일때는 계산 쿼리를 수행하고 3, 4 일 때는 출력 쿼리를 실행한다.
주의할 점은 수의 범위이다. 계산되는 값이 0 ~ 10억 사이이고, 쿼리의 최대 횟수가 50만번이니 어떠한 경우에서는 Int범위를 넘어설 수 있다. 그렇기 때문에 합과 XOR이 저장되는 변수는 Long타입으로 선언하여 이상한 값이 생기지 않도록 해주면 된다.
이외는 문제에 주어진대로 수행하면 되는 문제이다.
5.
'PS > BOJ' 카테고리의 다른 글
[BOJ - 28353] [백준 - 28353] 고양이 카[Silver - 3] [Solved by Kotlin] (0) | 2025.02.18 |
---|---|
[BOJ - 22233] [백준 - 22233] 가희와 키워드[Silver - 2] [Solved by Kotlin] (0) | 2024.02.19 |
[BOJ - 5397] [백준 - 5397] 키로거[Silver - 2] [Solved by Kotlin] (1) | 2024.01.08 |
[BOJ - 5430] [백준 - 1269] 대칭차집합[Silver - 4] [Solved by Kotlin] (0) | 2023.12.13 |
[BOJ - 5430] [백준 - 28278] 스택2 [Silver - 4] [Solved by Kotlin] (0) | 2023.12.07 |