본문 바로가기
2023년 이전/Codility

Lesson10 - Peaks

by JeongUPark 2020. 1. 6.
반응형

자세한 문제는 여기서 확인하시면 됩니다.

 

이 문제는 A[N-1] < A[N] 과 A[N] > A[N+1] 인 N 을 Peak이라 했을 때 Peak을 최소한 1개를 포함하는 block은 몇개인가를 찾는 문제입니다. block은 array A를 동일한 갯수로 나눈 각각을 말합니다.

 

code를 보면

fun solution(A: IntArray): Int {
      if(A.size < 3){
        return 0
    }
    var k = mutableListOf<Int>()
    for (i in 1 until A.size-1) {
        if (A[i] > A[i - 1] && A[i] > A[i + 1]) {
            k.add(i)
        }
    }
    if(k.size == 0){
        return 0
    }

    for(i in k.size downTo 1){
        if(A.size%i ==0) {
            var divide = A.size / i
            var checkCount = 0
            for (j in 0 until k.size) {
                if (divide * checkCount <= k[j] && divide * (checkCount + 1) > k[j]) {
                    checkCount++
                }
            }
            if (checkCount == i) {
                return i
            }
        }
    }

    return 1
}

우선 빈 array는 아니지만 array이 크기가 3보다 작으면 Peak을 만들수 없으니 0을 반환합니다.

 

그리고 Paek을 구하고

Peak의 갯수에서 1씩 줄여가면서 가능한 block인지를 파악합니다.

 

동일한 갯수의 블럭인지 확인을 위해 A.size%i ==0을 적용하였고

각 block에 최소 1개의 Peak이 존재하면 되기 때문에 한번이라도 checkCount로 각 block에 최소 1개의 Peak이 포함되어 있는지 체크합니다. 

그렇게 다 연산을 했는데 결과가 나오지않으면 만족하는 block은 1이기 때문에 마지막에 return 1을 합니다.

반응형

'2023년 이전 > Codility' 카테고리의 다른 글

Lesson7 - fish  (0) 2020.01.20
Lesson 7 - Nesting  (0) 2020.01.07
Lesson 10 - CountFacotrs  (0) 2020.01.06
Lesson 9 - MaxProfit  (0) 2020.01.06
Lesson8 - Dominator  (0) 2020.01.06