https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/
문제 분석
인접한 원소가 다른 방향을 갖고 있다면, 싸움이 붙는다.
싸움: 큰 물고기가 작은 물고기를 먹어버린다.
물고기는 한 방향으로 계속 이동한다.
의사 코드
순방향으로 탐색
while stack이 비어있지 않고, 현재 원소가 올라가고, stack에 있는 원소가 내려가고 있을 때 판단
if stack.last!.0 < currentElement.0
stack.popLast()
else
flag = true // 현재 원소가 잡아먹힘 -> 더 할 게 없음.
break
if flag == false // 현재 원소 잡아먹히지 않음 -> stack에 추가
append
나의 풀이
import Foundation
import Glibc
public func solution(_ A : inout [Int], _ B : inout [Int]) -> Int {
var survivedStack: [(Int, Int)] = []
for i in 0..<A.count {
let currentElement = (A[i], B[i])
var isEaten = false
while !survivedStack.isEmpty && survivedStack.last!.1 == 1 && currentElement.1 == 0 {
if survivedStack.last!.0 < currentElement.0 {
_ = survivedStack.popLast()
} else {
isEaten = true
break
}
}
if !isEaten {
survivedStack.append(currentElement)
}
}
return survivedStack.count
}
'Dev > PS' 카테고리의 다른 글
| [Swift 알고리즘] stoneWall - Codility (0) | 2024.02.29 |
|---|---|
| [Swift 알고리즘] Nesting - Codility (1) | 2024.02.29 |
| [Swift 알고리즘] Brackets - Codility (0) | 2024.02.15 |
| [Swift 알고리즘] NumberOfDiscIntersections - Codility (1) | 2024.02.09 |
| [Swift 알고리즘] Triangle - Codility (0) | 2024.02.09 |