반갑습니다!

[백준] 11723 집합 본문

알고리즘 문제 풀이

[백준] 11723 집합

김덜덜이 2021. 9. 2. 23:12
 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

풀이

시간 초과를 피하기 위해 이것저것 다양한 시도를 해봤던 문제이다. 비트 연산으로 바로 해결할 수 있을 줄 알았는데, BufferedReader, BufferedWriter까지 사용해야 정답처리 된다.

코드

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main() {
    var s = 0
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    repeat(br.readLine().toInt()) {
        val cmd = br.readLine().split(" ")
        when {
            cmd[0] == "add" -> s = s or (1 shl cmd[1].toInt())
            cmd[0] == "remove" -> s = s and (-1 xor (1 shl cmd[1].toInt()))
            cmd[0] == "check" -> bw.write("${if (s and (1 shl cmd[1].toInt()) != 0) 1 else 0}\n")
            cmd[0] == "toggle" -> s = s xor (1 shl cmd[1].toInt())
            cmd[0] == "all" -> s = -1
            cmd[0] == "empty" -> s = 0
        }
    }
    bw.flush()
}

'알고리즘 문제 풀이' 카테고리의 다른 글

[백준] 1213 팰린드롬 만들기  (0) 2020.12.10
[백준] 14438 수열과 쿼리 17  (0) 2020.12.04
[백준] 5676 음주 코딩  (0) 2020.12.02
[백준] 2268 수들의 합  (0) 2020.11.30
[백준] 1275 커피숍2  (0) 2020.11.29