알고리즘/Codility

[Codility] Fishes (JavaScript)

devpine 2025. 6. 14. 21:50
반응형

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

 

Fish coding task - Learn to Code - Codility

N voracious fish are moving along a river. Calculate how many fish are alive.

app.codility.com

 

문제:

살아남은 물고기의 수를 계산 및 반환한다. 각 물고기는 이동 방향과 크기가 있다. 반대방향의 물고기를 만났을 때, 상향하는 물고기가 더 크다면 먹는다.

내 풀이:

/**
 * 살아남은 물고기의 수를 계산 및 반환하는 함수
 * 
 * 각 물고기는 이동 방향과 크기가 있다.
 * 반대방향의 물고기를 만났을 때, 상향하는 물고기가 더 크다면 먹는다.

 * @params {number[]} A - 물고기 크기 배열
 * @params {number[]} B - 물고기 방향 배열
 * @returns {number} 마지막으로 살아남은 물고기의 수
 */
function solution(A, B) {
    const downFishes = [];
    let upFishesCnt = 0;

    for (let i = 0; i < B.length; i++) {
       if (B[i] === 1) {
           // 하류 물고기 
           downFishes.push(A[i]);
       } else {
           while (downFishes.length > 0) {
               if (downFishes[downFishes.length - 1] < A[i]) {
                   // 상류 물고기가 더 크다면 먹는다!
                   downFishes.pop();
                } else {
                    break;
                }
           }
           if (downFishes.length === 0) {
               upFishesCnt++;
           }
       }
    }
    return downFishes.length + upFishesCnt;
}

- 채점결과: 100%

반응형