본문 바로가기
Algorithm/📖Baekjoon

#11723 집합

by yewoneeee 2024. 7. 25.

문제


코드


fun main() {
    val br = System.`in`.bufferedReader()
    val sb = StringBuffer()
    val n = br.readLine().toInt()
    val s = IntArray(21)
    repeat(n) {
        val input = br.readLine()
        val (cmd, x) = if (input == "all" || input == "empty") {
            input to -1
        } else {
            input.split(" ").let { it[0] to it[1].toInt() }
        }
        when (cmd) {
            "add" -> s[x] = 1
            "remove" -> s[x] = 0
            "check" -> sb.append("${s[x]}\n")
            "toggle" -> s[x] = if (s[x] == 0) 1 else 0
            "all" -> { s.fill(1) }
            "empty" -> { s.fill(0) }
        }
    }
    println(sb)
    br.close()
}

 

풀이


처음에는 단순 리스트에 문제의 연산 작업을 직접 수행하려고 했었다. 근데 입력이 최대 3,000,000번 발생할 수 있기 때문에 비효율적이라고 생각했다. 

그래서 문제를 읽다가 x의 범위가 1부터 20까지로 제한되어있는 것을 보고, 배열을 써도 되지 않을까 하는 생각이 들었다.

x를 s에 추가한다면 s[x] = 1로 설정,

x를 s에서 제거한다면 s[x] = 0으로 설정

 

그래서 처음 작성한 코드가 아래와 같다.

fun main() {
    val br = System.`in`.bufferedReader()
    val n = br.readLine().toInt()
    val s = IntArray(21)
    for (i in 0..<n) {
        val op = br.readLine()
        if (op == "all") {
            for (j in 1..20) { s[j] = 1 }
        } else if(op == "empty") {
            for (j in 1..20) { s[j] = 0 }
        } else {
            val cmd = op.split(" ")[0]
            val x = op.split(" ")[1].toInt()
            when (cmd) {
                "add" -> s[x] = 1
                "remove" -> s[x] = 0
                "check" -> println(s[x])
                "toggle" -> s[x] = if (s[x] == 0) 1 else 0
            }
        }
    }
}

이렇게 작성했더니, 시간 초과가 발생했다

 

설마 이것도 stringBuffer를 사용해야하는건가라는 생각이 들었다.

s[x]를 계속해서 출력하는데, 이게 3,000,000번 반복되면 문제가 될 것 같았다.

그래서 stringBuffer를 사용해서 출력하도록 변경했다.

 

가독성을 높이기 위에 for문 대신 repeat문을 사용하고, cmd와 x를 받아오는 로직을 수정했다.

그리고 배열의 모든 요소를 변경하는 fill 함수를 사용해서 all과 empty를 구현했다.

'Algorithm > 📖Baekjoon' 카테고리의 다른 글

#8979 올림픽  (0) 2024.07.26
#9655 돌 게임  (0) 2024.07.25
#1157 단어 공부  (0) 2024.07.23
#2292 벌집  (0) 2024.07.22
#5073 삼각형과 세 변  (1) 2024.07.22

댓글