Apple is Apple

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.  

profile

Apple is Apple

@mjjjjjj