티스토리 뷰
링크 : https://codility.com/programmers/lessons/7-stacks_and_queues/fish/
문제>
* N개의 정수는 N개의 물고기(A배열 : 물고기의 크기, B배열 : 물고기의 방향.)를 나타낸다.
* P(번째) < Q(번째)인 물고기라면 P물고기는 Q보다 상류에 있다.
* A배열의 모든 요소는 유일하다.
* A배열의 더 큰 물고기는 작은 물고기를 먹는다.
* B배열의 값은 0또는 1만 포함하고 0은 물고기가 상류로 1은 물고기가 하류로 향한다.
* 같은방향의 물고기 끼리는 절대 만나지 않는다.
* 살아 남은 물고기의 숫자를 구하라.
해결방법. *스택사용.
1) 헤엄치는 중인 물고기 번호를 체크할 Stack을 만든다.
2) 물고기 수 까지 1씩 증가하는 반복문을 돌린다.
- 내부 추가 반복문으로
조건1) stack수가 0보다 크고
조건2) B[stack의 마지막으로 들어간 물고기 번호] - B[현재 물고기번호]의 방향 차가 1이고
조건3) A[stack의 마지막으로 들어간 물고기 번호]크기 < A[현재 물고기번호]크기가 작으면
- stack의 마지막으로 들어간 물고기 번호를 제거.
- 조건이 하나라도 맞지 않을 때 까지 반복.
- stack수가 0이거나 B[stack의 마지막으로 들어간 물고기 번호] - B[현재 물고기번호]의 방향 차가 1이 아니면 물고기 번호를 추가.
'주간 알고리즘풀기' 카테고리의 다른 글
[171120][Codility](C#)Flags (0) | 2017.11.21 |
---|---|
[171116][Codility](C#)Missing Integer (0) | 2017.11.20 |
[171115][Codility](C#)TapeEquilibrium (0) | 2017.11.16 |
[171113][HackerRank](C#)Picking Numbers (0) | 2017.11.14 |
[171110][HackerRank](C#)Jim and the Orders (0) | 2017.11.14 |
댓글