Kotlin/Algorithm Problems

<백준> 24.05.08에 푼 문제들

re트 2024. 5. 8. 11:03
728x90

1. 집합(Silver 5)

[백준]

https://www.acmicpc.net/problem/11723

[깃허브]

 

ForCodeKata/baekjoon 문제집/집합 at main · heesoo-park/ForCodeKata

Contribute to heesoo-park/ForCodeKata development by creating an account on GitHub.

github.com

제출 결과

작성한 코드는 다음과 같다.

import java.io.BufferedWriter
import java.io.OutputStreamWriter

val setS = mutableSetOf<Int>()

fun main() = with(System.`in`.bufferedReader()) {
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val m = readln().toInt()

    repeat(m) {
        val operation = readln().split(' ')

        when (operation[0]) {
            "add" -> add(operation[1].toInt())
            "remove" -> remove(operation[1].toInt())
            "check" -> bw.write("${check(operation[1].toInt())}\n")
            "toggle" -> toggle(operation[1].toInt())
            "all" -> all()
            "empty" -> empty()
        }
    }

    bw.flush()
    bw.close()
}

fun add(x: Int) {
    setS.add(x)
}

fun remove(x: Int) {
    setS.remove(x)
}

fun check(x: Int): Int {
    return if (setS.contains(x)) 1 else 0
}

fun toggle(x: Int) {
    if (check(x) == 1) remove(x) else add(x)
}

fun all() {
    setS.addAll(1..20)
}

fun empty() {
    setS.clear()
}

(실제로 리스트 내의 값을 변경하는 방법말고 배열 값을 플래그처럼 사용하는 방법이 있었다.)

2. 돌 게임(Silver 5)

[백준]

https://www.acmicpc.net/problem/9655

[깃허브]

 

ForCodeKata/baekjoon 문제집/돌 게임 at main · heesoo-park/ForCodeKata

Contribute to heesoo-park/ForCodeKata development by creating an account on GitHub.

github.com

제출 결과

작성한 코드는 다음과 같다.

import java.io.BufferedWriter
import java.io.OutputStreamWriter

/** n개 있을 때 마지막 돌을 가져갈 때까지의 횟수를 저장하는 dp배열 */
val dp = IntArray(1001)

fun main() = with(System.`in`.bufferedReader()) {
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val n = readln().toInt()

    dp[1] = 1
    dp[2] = 2
    dp[3] = 1

    for (i in 4..n) {
        dp[i] = minOf(dp[i - 1], dp[i - 3]) + 1
    }

    bw.write(checkWinner(dp[n]))
    bw.flush()
    bw.close()
}

fun checkWinner(cnt: Int): String {
    return if (cnt % 2 == 0) {
        "CY"
    } else {
        "SK"
    }
}

(짝수 홀수로만 판단하는 방법이 있더라. 1과 3만 뽑을 수 있으니 한 사이클이 지나면 무조건 짝수개가 빠지는 걸 생각해서 홀수면 SK, 짝수면 CY...!!)

3. 줄세우기(Silver 5)

[백준]

https://www.acmicpc.net/problem/10431

[깃허브]

 

ForCodeKata/baekjoon 문제집/줄세우기 at main · heesoo-park/ForCodeKata

Contribute to heesoo-park/ForCodeKata development by creating an account on GitHub.

github.com

제출 결과

작성한 코드는 다음과 같다.

import java.io.BufferedWriter
import java.io.OutputStreamWriter


fun main() = with(System.`in`.bufferedReader()) {
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val p = readln().toInt()

    repeat(p) {
        var result = 0
        val case = readln().split(' ').map { it.toInt() }.toMutableList()
        for (i in 2 until case.size) {
            for (j in 1 until i) {
                if (case[j] > case[i]) {
                    result += (i - j)
                    case.add(j, case.removeAt(i))
                    break
                }
            }
        }

        bw.write("${it + 1} $result\n")
    }

    bw.flush()
    bw.close()
}

(여기도 값을 진짜로 바꾸는 거 말고 자기 앞에 있는 큰 숫자들의 개수를 세는 방식이 있더라)

반응형

'Kotlin > Algorithm Problems' 카테고리의 다른 글

<백준> 24.05.13에 푼 문제들  (0) 2024.05.13
<백준> 24.05.09에 푼 문제들  (0) 2024.05.09
<백준> 24.05.07에 푼 문제들  (0) 2024.05.07
<백준> 파티(Gold 3)  (0) 2024.05.03
<백준> 고층 건물(Gold 4)  (0) 2024.05.02