본문 바로가기

Algorithm/Greedy

(C++) - 백준(BOJ) 14659번 : 한조서열정리하고옴ㅋㅋ

반응형

www.acmicpc.net/problem/14659

 

14659번: 한조서열정리하고옴ㅋㅋ

첫째 줄에 봉우리의 수 겸 활잡이의 수 N이 주어진다. (1 ≤ N ≤ 30,000) 둘째 줄에 N개 봉우리의 높이가 왼쪽 봉우리부터 순서대로 주어진다. (1 ≤ 높이 ≤ 100,000) 각각 봉우리의 높이는 중복 없이

www.acmicpc.net

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';
}