Apple /Algorithm

[Algorithm/Swift] Codility / Fish

moon_0 2022. 12. 27. 22:57

문제

https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/

풀이

이 문제는 좀 재미있는 문제입니다.(?)

배열 A는 물고기의 크기를 배열 B는 물고기의 방향을 나타냅니다.

방향이 다른 물고기가 서로 마주할때 큰 물고기가 작은 물고기를 잡아 먹습니다.  🤜🏻  🤛🏻 🤛🏻 🤛🏻

마지막 까지 살아 남은 물고기는 몇마리인지 구합니다.

Stack를 이용하여 비교하여 답을 구해보고자 합니다.

Code O(N)

public func solution(_ A : inout [Int], _ B : inout [Int]) -> Int {
    
    var stack = Array<Int>()
    var survivor = 0

    for (index, size) in A.enumerated() {

        if B[index] == 1 {
            stack.append(size)
        } else {
        //반대 방향의 물고기를 만날일이 없는 물고기
            if stack.count == 0 {
                survivor += 1
            } else {
                
                while stack.count > 0 {
					
                    // 새로 만난 물고기(size) 사이즈가 더 크면 기존 물고기는(sizeDown) 스택에서 빼기
                    guard let sizeDown = stack.last, size > sizeDown else {
                        break
                    }

                    stack.removeLast()

                    if stack.count == 0 {
                        survivor += 1
                    }
                }
            }
        }
    }

    return survivor + stack.count

}

처음에는 재밌는 문제라고 생각했는데 좀 어려움,,

Udemy랑 다른분 소스 코드를 좀 참고했습니다...

 

역시 틀려야,,공부가 되는것 같네요..