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

Lesson7 - fish

by JeongUPark 2020. 1. 20.
반응형

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

 

간단하게 A array는 물고기 크기 B array는 물고기의 방향인데 다른 방향의 물고기들이 만나면 더 큰 물고기가 작은물고기를 잡아 먹습니다. 그리고 B array에서 0은 위로 1은 아래로 내려가는 물고기를 말합니다.

 

위의 조건에 맞도록 array들을 분석해서 마지막으로 남은 물고기의 갯수를 반환하는 문제 입니다.

 

해결 code

fun solution(A: IntArray, B: IntArray): Int {
       val downFish = arrayListOf<Int>()
    var count = 0
    for(i in A.indices) {
        if(B[i] == 1){
            downFish.add(A[i])
        }else{
            while(downFish.size > 0){
                if(downFish[downFish.size-1] < A[i]){
                    downFish.removeAt(downFish.size-1)
                }else{
                    break
                }
            }
            if(downFish.isEmpty()){
                count++
            }
        }
    }
    return downFish.size+ count
}

고민을 쫌 하기 했지만 생각보다 간단한 문제 입니다.

1. 물고기의 방향을 체크합니다.

2. 내려가는 물고기일 경우 downfish List에 크기를 추가합니다.

3-1. 올라가는 물고기일 경우 downfish List에 아무런 데이터가 없을 경우 count를 +1해줍니다. 즉, count는 올라가는 물고기의 갯수가 됩니다.

3-2. 올라가는 물고기일 경우 downfish List에 데이터가 있을 경우 크기 비교를 통해 downfish List의 물고기들을 지워 나가거나 올라가는 물고기의 count를 +1 해줍니다.(count +1은 downfish List의 데이터를 지우다 모두 지우게 되면 하게 됩니다.)

4. downfish List의 size와 count를 더한 값이 남아있는 물고기의 갯수 입니다.

반응형

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

Lesson 10 - MinPerimeterRectangle  (0) 2020.01.27
Lesson 6 - NumberOfDicIntersection  (0) 2020.01.20
Lesson 7 - Nesting  (0) 2020.01.07
Lesson10 - Peaks  (0) 2020.01.06
Lesson 10 - CountFacotrs  (0) 2020.01.06