PS/Baekjoon Online Judge

[백준 31235] 올라올라 [C/C++, Python]

kimyoungrok 2024. 1. 16. 01:27
728x90

문제

길이가 N인 수열 A가 주어질 때, N 이하의 양의 정수 k에 대하여 길이가 N - k + 1인 수열 B를 다음과 같이 정의하자.

수열  감소하지 않도록 하는 k의 최솟값을 구해보자.

예를 들어 A = {3,1,4,2,5}이고 k = 2라면, B = {3,4,4,5}이므로 감소하지 않지만, 이라면 B = {3,1,4,2,5}이므로 감소하는 부분이 존재한다. 이 경우 의 최솟값은 2이다.

입력

첫째 줄에 수열 의 길이 이 주어진다. (

둘째 줄에는 A(1),…이 공백으로 구분되어 주어진다. (

입력으로 주어지는 모든 수는 정수이다.

출력

문제의 조건을 만족하는 이하의 양의 정수 중 최솟값을 출력하라.


풀이

정수 k의 최솟값을 구하기 위해서는 수열 B가 감소하는 최장 구간의 길이를 구하면 된다.

수열 A에 대해 최댓값을 갱신해주며 이전 최댓값의 위치가 가장 먼 구간을 갱신해주면 K를 구할 수 있다.

최장 구간의 길이 K는 수열 A의 모든 요소들에 대해 수열 B를 구할 수 있는 충분한 수가 된다.

만약, 이전 최댓값보다 작은 경우가 아니라면, 최댓값을 갱신해주고, 구간의 길이 또한 1로 초기화 해주자.


소스코드 

C/C++

Python


출처

 

31235번: 올라올라

길이가 $N$인 수열 $A$가 주어질 때, $N$ 이하의 양의 정수 $k$에 대하여 길이가 $N-k+1$인 수열 $B$를 다음과 같이 정의하자. $$B_{i}=\max_{i \le j \le i+k-1}A_j$$ 수열 $B$가 감소하지 않도록 하는 $k$의 최솟값

www.acmicpc.net

728x90

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 04796] 캠핑 [C/C++]  (1) 2024.01.31
[백준 01339] 단어 수학 [C/C++]  (1) 2024.01.29
[백준 01439] 뒤집기 [C/C++]  (0) 2024.01.14
[백준 13305] 주유소 [C/C++]  (0) 2024.01.13
[백준 01789] 수들의 합 [C/C++]  (0) 2024.01.12