반응형
greedy 문제였습니다.
풀이방법
1. i번째 봉우리에서 시작합니다. 그 다음 i+1봉우리부터 끝까지 loop를 돌며 i번째 봉우리의 높이보다 작은 j번째 봉우리들의 개수를 세줍니다. 조건에 만족할 때마다 ans에 세준 개수를 저장합니다. 만약 반대라면 구간을 건너뛰기 위해 i = j-1을 저장하고 break;해줍니다.
2. ans를 출력합니다.
Code
#include <bits/stdc++.h>
using namespace std;
int n, ans;
int mountain[300001];
int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> mountain[i];
for(int i = 0; i < n; i++){
int cnt = 0;
for(int j = i+1; j < n; j++){
if(mountain[i] >= mountain[j]) cnt++, ans = max(ans,cnt);
else { i = j-1; break; }
}
}
cout << ans << '\n';
}
'Algorithm > Greedy' 카테고리의 다른 글
(C++) - 백준(BOJ) 1138번 : 한 줄로 서기 (0) | 2021.05.02 |
---|---|
(C++) - 백준(BOJ) 1339번 : 단어 수학 (0) | 2021.04.17 |
(C++) - 백준(BOJ) 1080번 : 행렬 (2) | 2021.04.01 |
(C++) - 백준(BOJ) 1946번 : 신입 사원 (0) | 2021.03.31 |
(C++) - 백준(BOJ) 1049번 : 기타줄 (0) | 2021.03.29 |