반응형
자세한 문제는 여기서 확인하시면 됩니다.
이 문제는 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 |