[백준 10158 - Kotlin] 개미

6659 단어 AdHocmathkotlinAdHoc

문제링크

import java.io.BufferedReader
import java.io.BufferedWriter
import kotlin.math.abs

private lateinit var bufferedReader: BufferedReader
private lateinit var bufferedWriter: BufferedWriter

fun main() {
    bufferedReader = System.`in`.bufferedReader()
    bufferedWriter = System.out.bufferedWriter()

    // 1. get (w, h)
    val (w, h) = bufferedReader
        .readLine()
        .split(" ")
        .map { it.toInt() }

    // 2. get (p, q)
    var (p, q) = bufferedReader
        .readLine()
        .split(" ")
        .map { it.toInt() }

    // 3. get t
    val t = bufferedReader.readLine().toInt()

    // 4. get result
    // (p + t) : 0부터 시작한다는 것을 의미합니다.
    // % (2 * w) : 다시 0으로 돌아오는 시점을 의미합니다.
    // (p + t) % (2 * w) 의 값이 0 ~ w 사이의 값이라면 그 값만큼 이동시켜주면 되지만,
    // 다시 돌아오는 경우 (즉, (w + 1) ~ (2 * w - 1)) 사이의 값인 경우를 처리해야 합니다.
    // 예를 들어, (p + t) % (2 * w)의 값이 8이라면, 4만큼 이동시켜주어야 합니다. 8 = 6 + 2 -> abs(6 - (6 + 2)) = 2 -> 6 - 2 = 4
    p = w - abs(w - (p + t) % (2 * w))
    q = h - abs(h - (q + t) % (2 * h))
    bufferedWriter.write("$p $q")

    bufferedReader.close()
    bufferedWriter.close()
}

좋은 웹페이지 즐겨찾기