백준 28353 고양이 카페 Kotlin

: ) YOUNG·2023년 7월 25일
1

알고리즘

목록 보기
228/422
post-thumbnail

백준 28353번
https://www.acmicpc.net/problem/28353

문제




생각하기


  • 두 포인터 문제이다.
    • 정렬해서 양쪽에서 하나씩 줄여나가면 되는 문제이다.
    • 두 포인터 문제 처음 풀어봤는데 새로운 걸 알게 됬다

동작



코드


Kotlin

import java.io.*
import java.util.*

// input
private lateinit var br: BufferedReader
private lateinit var sb: StringBuilder

// variables
private var N = 0
private var K = 0
private lateinit var arr: IntArray


fun main() {
    br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    sb = StringBuilder()

    input()

    solve()

    bw.write(sb.toString())
    bw.close()
} // End of main

private fun solve() {
    var count = 0
    var minIndex = 0
    var maxIndex = N - 1

    while (minIndex < maxIndex) {
        val temp = arr[minIndex] + arr[maxIndex]
        if (temp > K) {
            // 양 끝의 합이 K를 넘었을 때 높은 값을 줄이기.
            maxIndex--
        } else if (temp < K) {
            // 양 끝의 합이 K보다 작을 때, minIndex를 올리고, maxIndex는 내리는 과정
            count++
            minIndex++
            maxIndex--
        } else if(temp == K) {
            count++
            maxIndex--
            minIndex++
        }
    }

    sb.append(count)
} // End of solve

private fun input() {
    var st = StringTokenizer(br.readLine())
    N = st.nextToken().toInt()
    K = st.nextToken().toInt()

    arr = IntArray(N)
    st = StringTokenizer(br.readLine())
    for (i in 0 until N) {
        arr[i] = st.nextToken().toInt()
    }

    arr.sort()
} // End of input

1개의 댓글

comment-user-thumbnail
2023년 7월 25일

공감하며 읽었습니다. 좋은 글 감사드립니다.

답글 달기