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