728x90
반응형
목차
https://www.acmicpc.net/problem/14719
문제
문제 구현 방향
보이는 대로 바닥을 채우고 블록은 1로 표시하여 2차원 배열로 만들어 직접 반복문을 통해
카운트하는 방식으로 문제를 풀었다.
문제 풀이 시 주의점
바닥이 항상 막혀있다는 점과 언제부터 카운트를 할지 시점만 잘 주의해 주면 된다.
코드 구현
#include <iostream>
using namespace std;
int ml = 0; //빗물 세어주기
int main() {
int H, W, i, j, num;
cin >> H >> W;
int** arr = new int* [H+1]; //바닥은 있다 가정하므로 블록으로 채워준다
for (i = 0; i < H + 1; i++)
{
arr[i] = new int[W];
for (int j = 0; j < W; j++) {
arr[i][j] = 0; // 0으로 초기화
}
}
for (i = 0; i < W; i++) {
arr[0][i] = 1; //바닥을 블록으로 채워줌
}
for (i = 0; i < W; i++) {
cin >> num;
for (j = 1; j <= num; j++) {
arr[j][i] = 1; //블록만 1로 표시
}
}
for (i = H; i >= 0; i--) {
bool check1 = false; //시작점 flag신호
int s = 0;
for (j = 0; j < W; j++) {
if (arr[i][j] == 1 && !check1) { //시작점이 false이고 블록일 경우 시작점을 초기화
check1 = true;
}
else if (arr[i][j] == 0 && check1) { //시작점이 true일 경우 카운트 시작
s++;
}
else if (arr[i][j] == 1 && check1) { //시작점이 true이고 블록일 경우
if (s != 0) { //카운트가 0이 아닐경우에만 누적해주고 초기화
ml += s;
s = 0;
}
}
}
}
cout << ml;
}
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준][그리디] 11501 주식 c++ 구현 (1) | 2024.03.16 |
---|---|
[백준][이분 탐색] 1484 다이어트 c++구현 (0) | 2024.03.14 |
[백준][투 포인터] 1806 부분합 c++구현 (1) | 2024.02.29 |
[백준][이진 탐색] 1654 랜선 자르기 c++구현 및 설명 (0) | 2024.02.27 |
[백준][bfs] 1967 트리의 지름 c++ 구현 (0) | 2024.02.24 |