※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 21600번 문제인 계단이다.
문제는 아래 링크를 확인하자.
21600번: 계단
자료의 분포를 아래의 그림과 같이 나타낸 그래프를 히스토그램이라고 합니다. 당신은 히스토그램 영역에서 가장 큰 계단을 찾으려고 합니다. 계단은 아래 조건을 만족하는 영역을 말합니다.
www.acmicpc.net
이 문제에서 "계단"이 다음과 같은 성질이 있다는 것을 관찰하자:
길이가 2보다 큰 모든 "계단"은 각 열의 높이를 1씩 낮춰도 길이가 1 줄어든 "계단"이 된다.
따라서, 히스토그램의 맨 왼쪽부터 계단을 쌓아나가다가, 더 쌓을 수 없는 높이의 (낮은)막대를 만나면 이 막대를 포함하는 지금까지의 가장 길이가 큰 계단은 이 막대의 높이와 같아질 것이라는 것을 알 수 있다.
이 성질을 이용하여 가장 큰 계단의 크기를 갱신해 나간다면 문제를 간단히 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N; cin >> N;
int mxstair = 0;
int stair = 0;
for (int i = 0; i < N; i++) {
int x; cin >> x;
if (x > stair) {
stair++;
if (mxstair < stair) mxstair = stair;
}
else stair = x;
}
cout << mxstair;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2887 // C++] 행성 터널 (0) | 2021.05.23 |
---|---|
[BOJ 1028 // C++] 다이아몬드 광산 (0) | 2021.05.22 |
[BOJ 21599 // C++] 아이템 배치하기 (0) | 2021.05.20 |
[BOJ 1101 // C++] 스티커 정리 1 (0) | 2021.05.19 |
[BOJ 10977 // C++] 음식 조합 세기 (0) | 2021.05.18 |