물고기의 크기를 나타내는 배열 A와 물고기의 방향을 나타내는 B가 주어졌을 때, 마지막에 살아남은 물고기의 수를 구하는 문제.
스택을 이용하여 연속으로 같은 방향의 물고기들이 나오는 경우를 체크해준다.
https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/
cpp code
#include <stack>
bool dead[100000];
int solution(vector<int> &A, vector<int> &B) {
stack<int> S;
for (int i=0; i<A.size(); i++) {
if (dead[i]) continue;
if (B[i] == 1) {
S.push(i);
}
else {
while (!S.empty() && A[S.top()] < A[i]) {
dead[S.top()] = true;
S.pop();
}
if (!S.empty()) {
dead[i] = true;
}
}
}
int ans = 0;
for (int i=0; i<A.size(); i++) {
ans += !dead[i];
}
return ans;
}