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

Lesson 9 - MaxProfit

by JeongUPark 2020. 1. 6.
반응형

자세한 문제는 여기서 확인가능합니다.

 

0<=P<=Q<=N 일떄 array A의 A[Q]-A[P]가 가장 큰 값을 찾는 문제

fun solution(A: IntArray): Int {
     if(A.size < 2) return 0
    var ans = 0
    var min = Int.MAX_VALUE
    var minPosition = 0
    for(i in 0 until A.size){
        if(A[i] < min){
            min = A[i]
            minPosition = i
        }
    }
    var max = 0
    for(i in minPosition until A.size){
        if(A[i] > max){
            max = A[i]
        }
    }
    return max - min
}

처음에는 제일 작은 값의 position을 찾고 그 position보다 큰 array A index에서 min값을 빼서 찾는 방법을 사용했습니다. 근데 결과는 77% 이유는 그냥 제일 큰 값과 제일 작은 값을 찾아서 빼서 문제가 된거 같다. (자세한 이유는 안나와서 ...)

그리고 code를 자세히 보니 한번에 섞을 수 있어서 다시 coding을 했습니다.

fun solution(A: IntArray): Int {
    if(A.size < 2) return 0
    var ans = 0
    var min = Int.MAX_VALUE
    for(i in A.indices){
        if(A[i]< min){
            min = A[i]
        }else{
            if(ans < (A[i]-min)){
              ans = A[i]-min
            }
        }
    }
    return ans
}

최소값을 찾고 최소값이 아닐 경우에는 그 index 값에서 최소값을 빼서 최대 이익은 찾도록 하였습니다. 사실 위에 code의 for문 두개를 그냥 하나로 합쳤을 뿐이라 생각했는데 이번것은 100%로 이전꺼는 77%인 이유를 모르겠습니다... (아래code는 전부 빼보면서 차이의 최대값을 찾은거고 위에는 단순히 최대 값과 최소값을 찾아서 뺴기한 차이인데 말이죠..)

반응형

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

Lesson10 - Peaks  (0) 2020.01.06
Lesson 10 - CountFacotrs  (0) 2020.01.06
Lesson8 - Dominator  (0) 2020.01.06
Lesson7 - Brackets  (0) 2019.12.19
Lesson6 - Triangle  (0) 2019.12.16