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

Lesson 5 - PassingCars

by JeongUPark 2019. 11. 28.
반응형

상세 문제는 여기서 확인 하실 수 있습니다.

 

문제를 간단히 설명하면 0 다음에 1이 몇개 오는지 전부 세서 return 하는 문제입니다.

 

간단하게 문제의 예를 보면 array A가 

A[0] = 0

A[1] = 1

A[2] = 0

A[3] = 1

A[4] = 1

이럴 때 0 다음에 1인 갯수는 A[0]= 0일 때 1이 3개가 있고 A[2]= 0 일때 2개 총 5개가 나옵니다. (0,1),(0,3),(0,4),(2,3),(2,4)

 

그럼 문제를 풀어보도록 하겠습니다.

fun solution(A: IntArray): Int {
    // write your code in Kotlin
    
    var count = 0
    val maxSize = A.size
    val exceptCount = 1000000000
    val zero =arrayListOf<Int>()

    for (i in A.indices) {
        if (A[i] == 0) {
            zero.add(i)
        }
    }

    val zSize = zero.size
    for (i in zero.indices) {
        if(count > exceptCount) return -1
        count += maxSize - zSize - zero[i] + i
    }
    return count
}

문제는 보면 총 갯수가 1000000000이 넘어가면 -1을 리턴하도록 되어있습니다.

 

그래서 count가 1000000000일 경우 -1을 return 합니다.

 

그리고 본격적인 로직은 

 

전체 array A의 갯수에서 0의 갯수를 빼고 0의  순서 값을 뺀 후  몇번째 0이었는지에 대한 값을 더해주면 각 0 이후에 나오는 1의 갯수를 계산 할 수 있습니다.

 

Code에서는

 

count += maxSize - zSize - zero[i] + i

 

이 부분 입니다.

 

반응형

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

Codility - Lesson5 MinAvgTwoSlice  (0) 2019.12.13
Lesson 5 - GenomicRangeQuery  (0) 2019.12.06
Codility - Lesson 4 MissingInteger  (0) 2019.11.15
Codility - Lesson 4 MaxCounters  (0) 2019.11.14
Codility - Lesson4 FrogRiverOne  (0) 2019.11.14