티스토리 뷰
링크 : https://codility.com/programmers/lessons/7-stacks_and_queues/stone_wall/
문제>
벽을 세워야 한다.
벽은 N미터로 두께는 일정하지만 다른 장소에서는 다른 높이를 가져야한다.
벽의 높이는 N개의 양의 정수로 이루어진 배열 H.
H[0]은 벽의 왼쪽 끝의 높이, H[N-1]은 벽의 오른쪽 끝의 높이이다.
벽을 구축하는데 필요한 최소 블록 수를 계산하라.
해결방법.
* H[N미터] = 높이.
* H[i+1]이 H[i]가 보다 크다면 벽은 점점 높아진다.(새로운 블록이 생긴다.) < 이부분을 체크하면 된다.
* H[i+1]이 H[i]가 보다 작다면 벽을 닫는다.
1) 길이를 체크할 스택생성.
2) 0부터 N까지 반복.
- 만약 스택이 0이면 Push. 블록 카운트 증가.
- 만약 스택이 0보다 크고 Peek값이 H[i] 보다 크다면 Pop 반복.
- Peek값이 H[i] 보다 작다면 Push H[i] 블록 카운트 증가.
*(Peek값이 H[i] 같은건 체크하지 않는다. 문제의 다른 높이를 가져야 하는 조건.)
'주간 알고리즘풀기' 카테고리의 다른 글
[171204][HackerRank](C#)Flipping bits (0) | 2017.12.04 |
---|---|
[171201][HackerRank](C++)Tree: Postorder Traversal (0) | 2017.12.01 |
[171129][HackerRank](C#)Mars Exploration (0) | 2017.11.29 |
[171128][HackerRank](C#)Correctness and the Loop Invariant (0) | 2017.11.28 |
[171127][HackerRank](C#)Ice Cream Parlor (0) | 2017.11.27 |
댓글