[BOJ] 올바른 배열 in Kotlin

박준규·2022년 2월 1일
0

알고리즘

목록 보기
17/39

문제풀러 가기!

오랜만에 Two Pointer 문제를 풀어봤습니다. 그렇게 어려운 문제는 아니었는데, 아이디어를 못잡으면 풀지는 못하는 문제였습니다. 최근 코딩테스트 메타를 보면 충분히 괜찮은 문제였다고 생각해요. 최근에 그냥 내키는 문제만 풀고 있어서 그런거 일수도 있지만, 그래도 정말 재밌게 푼 문제였습니다.

문제 풀이 아이디어는 정말 쉽습니다. 문제에서 주어진 조건을 따르면서 말그대도 two pointer로 알고리즘을 짜면 됩니다.

그래서 아이디어는 엄청 간단해요.

left와 right가 있으면서 문제의 조건에 만족되면 right 그렇지 않으면 left를 1씩 증가시키면 끝나는 문제였습니다. 아래는 제가 풀어던 코드에요. 그렇게 어렵지 않은 것을 확인할 수 있습니다.

참고로 문제의 아이디어에서는 5개의 숫자가 연속적이면 된다고 했기 때문에, 규칙을 5로 정하면 됩니다. left 인덱스에 해당하는 숫자에 5를 더한 값과 right 인덱스에 해당하는 숫자를 비교하면서 O(n) 순회로 끝낼 수 있습니다.

import java.util.*

fun main() = with(Scanner(System.`in`)) {
    val n = nextInt()
    val intArr = IntArray(n)
    for (i in 0 until n) {
        intArr[i] = nextInt()
    }
    intArr.sort()
    var left = 0
    var right = 0
    var cnt = 0
    while (right < n) {
        when {
            intArr[left] + 5 > intArr[right] ->
            {
                right ++
                cnt ++
            }
            else -> {
                left ++
                right ++
            }
        }
    }
    when {
        cnt > 5 -> println(0)
        else -> println(5-cnt)
    }
}

python으로는 빨리 풀어볼게요. 위 코드와 별 다른건 아마 없을거에요!

개발예술이고 서비스작품이다.

profile
'개발'은 '예술'이고 '서비스'는 '작품'이다

0개의 댓글