[Codility] Fish

hamsteak·2023년 10월 10일
0

ps

목록 보기
28/39

물고기의 크기를 나타내는 배열 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;
}
profile
안녕하세요

0개의 댓글