Fish
N voracious fish are moving along a river. Calculate how many fish are alive.
Task Score
100%
Correctness
100%
Performance
100%
뭔가 귀여운데 잔인한 자연의 섭리같은 문제..
A 배열에는 물고기의 크기,
B 배열에는 물고기의 방향이 나타나있다. (0이면 올라가고, 1이면 내려가고)
배열의 인덱스가 앞일수록 물고기는 더 위에 있다.
결국 나보다 앞 인덱스인 물고기가 내가잡아먹어서 없는상황에서 내가 위로(0) 올라가면 사는거고,
내가 다 잡아먹어서 제일 마지막 인덱스인데 내려가면 사는거다.
처음에 이상하게 혼자 복잡하게생각해서 스택 두개가지고 난장판을 피우다가
0%의..처참한 점수를 받고 정신차리고 하나의 스택으로 제대로 증신차리고 풀었다.
내려가는애들은 스택에 담아놓고
올라가는애 생기면 걔가 올라가면서 스택에 있는 내려가는애들을 꺼내서 도장깨기한다.
그러다가 내가 맨위로 올라가면 살았다고 카운트하고,
올라가는애들이 다 사라진 후에 스택 안에 남은 내려가는애들도 다 살아남은 것이므로
마지막에 다 합쳐 결과를 반환하면 된다.
// you can also use imports, for example:
import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(int[] A, int[] B) {
int answer = 0;
Stack<Integer> goingDownSt = new Stack<>();
for (int i = 0; i < A.length; i++) {
int fish = A[i];
if (B[i] == 0) {
if (goingDownSt.isEmpty()) {
answer++;
} else if (goingDownSt.peek() < fish) {
goingDownSt.pop();
i--;
}
} else {
goingDownSt.push(fish);
}
}
return answer + goingDownSt.size();
}
}
'공부 > algorithm' 카테고리의 다른 글
[codility] StoneWall (0) | 2019.12.22 |
---|---|
[codility] Nesting (0) | 2019.12.20 |
[codility] Brackets (0) | 2019.12.11 |
[LeetCode] #4 Median of Two Sorted Arrays (0) | 2019.12.08 |
[LeetCode] #3 Longest Substring Without Repeating Characters (0) | 2019.12.05 |
댓글