Apple is Apple

문제 설명

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

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

입출력 예

입력

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

 

출력    

x번째 줄에는 x번째 글을 쓰고 난 후에 메모장에 남아 있는 키워드의 개수를 출력해 주세요.

 

제한

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

예제 입력

12
1 3
1 1
1 4
3
4
1 1
3
4
2 1
2 4
3
4

 

예제 출력

8
6
9
7
4
2

코드

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()
}

풀이

전체 합과 XOR 값을 알아내기 위해 쿼리마다 분기처리를 하여 계산을 진행한다.

1, 2 일때는 계산 쿼리를 수행하고 3, 4 일 때는 출력 쿼리를 실행한다.

 

주의할 점은 수의 범위이다. 계산되는 값이 0 ~ 10억 사이이고, 쿼리의 최대 횟수가 50만번이니 어떠한 경우에서는 Int범위를 넘어설 수 있다. 그렇기 때문에 합과 XOR이 저장되는 변수는 Long타입으로 선언하여 이상한 값이 생기지 않도록 해주면 된다.

 

이외는 문제에 주어진대로 수행하면 되는 문제이다.

 

 

profile

Apple is Apple

@mjjjjjj