반응형
리뷰
https://www.acmicpc.net/problem/14719
블록으로 이루어진 2차원 세계에서 고이는 빗물의 총량을 구하는 문제
가로 길이가 500밖에 되지 않아서 진짜 뇌빼고 아무생각 없이 구현하면 풀린다.
전역 변수
- h, w : 2차원 세계의 블록의 최대 세로 길이 h와 가로 길이 w
- ans : 정답을 저장하고 출력할 변수
- nodes : 블록의 높이 정보를 저장할 정수형 배열, 크기는 502보다 크게만 해주면 된다.
함수
없음
문제풀이
- h와 w를 입력 받고, w개의 블럭을 nodes에 입력받아 준다, 이때 각 블럭의 인덱스는 1 ~ w로 지정해 준다.
- 양쪽 끝의 벽을 뺀 2 ~ w - 1에 있는 블럭들을 순회해 준다.
- 자신 기준 왼쪽에서 가장 큰 값 l, 오른쪽에서 가장 큰 값 r을 구해준다.
- 둘 중 작은 값에서 자신의 블록 높이를 뺀 값을 ans에 더해준다.
- 탐색이 종료되었다면 ans에 저장된 값을 출력해 준다.
참고 사항
- 큰 값을 찾을때 0도 포함해야 하므로 1-based-index로 구현하였다.
- 즉, 왼쪽 오른쪽에 0이 존재해야 하므로 nodes배열을 전역변수로, 크기를 502 이상으로 해준 것이다.
- 양쪽의 최대값 중 작은값에서 자신을 뺄 때 음수가 나올 수 있으므로 max 0처리를 해주어야 한다.
정답 코드
#include<iostream>
#include<algorithm>
using namespace std;
int h, w, ans;
int nodes[555];
int main() {
cin >> h >> w;
for (int i = 1; i <= w; i++) cin >> nodes[i];
for (int i = 2; i < w; i++) {
int *l = max_element(nodes, nodes + i);
int *r = max_element(nodes + i + 1, nodes + w + 1);
ans += max(0, min(*l, *r) - nodes[i]);
}
cout << ans;
}
728x90
반응형
'알고리즘 공부 > C++' 카테고리의 다른 글
[G3] 백준 14658번 하늘에서 별똥별이 빗발친다 C++ set, 브루트포스 알고리즘 (0) | 2024.10.31 |
---|---|
[G3] 백준 24337번 가희와 탑 C++ 구현, 그리디 알고리즘, 해 구성하기 (0) | 2024.10.31 |
[G5] 백준 20437번 문자열 게임 2 C++ 해시맵, 문자열 (0) | 2024.10.30 |
[S1] 백준 1283번 단축키 지정 C++ 구현, 문자열 (0) | 2024.10.30 |
[S1] 백준 1522번 문자열 교환 C++ 브루트포스 알고리즘, 슬라이딩 윈도우 (0) | 2024.10.29 |