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

Lesson8 - Dominator

by JeongUPark 2020. 1. 6.
반응형

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

 

이 문제는 array에서 과반수 이상을 차지하는 숫자를 찾아서 그 숫자의 array 위치중 1개를 반환하는 문제입니다.

 

첫번째 풀이는

fun solution(A: Array<Int>): Int {
    val B = A.copyOf()
    B.sort()
    var checkNum = A[0]
    var count = 1
    var value = -1
    for (i in 1 until A.size) {
        if (checkNum == B[i]) {
            count++
        } else {
            checkNum = B[i]
            count = 1
        }
        if (count > (B.size / 2)) {
            value = checkNum
        }
    }
    if (value != -1) {
       for (i in A.indices) {
          if (A[i] == value) {
                return i
           }
       }
    }
    return -1
}

sort를 해서 과반수넘는 값을 찾고 그 값의 위치를 반환하였습니다. 그리고 결과는 83% 이유는 빈 array였을 경우와 1개 일 경우에 대한 처리가 없어서 그래서 다시 coding한 결과는

fun solution(A: IntArray): Int {
    if(A.isEmpty()) return -1
    val B = A.copyOf()
    B.sort()
    var checkNum = A[0]
    var count = 0
    var value = -1
    for (i in 0 until A.size) {
        if (checkNum == B[i]) {
            count++
        } else {
            checkNum = B[i]
            count = 1
        }
        if (count > (B.size / 2)) {
            value = checkNum
        }
    }
    if (value != -1) {
       for (i in A.indices) {
          if (A[i] == value) {
                return i
           }
       }
    }
    return -1
}

이렇게 for문을 1부터가 아닌 0부터 체크하도록 하여 변경 하였더니 100%가 되었습니다.

반응형

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

Lesson 10 - CountFacotrs  (0) 2020.01.06
Lesson 9 - MaxProfit  (0) 2020.01.06
Lesson7 - Brackets  (0) 2019.12.19
Lesson6 - Triangle  (0) 2019.12.16
Lesson 6 - Distinct  (0) 2019.12.14