※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 32752번 문제인 수열이에요?이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/32752
수의 배치를 바꿔 얻은 수열이 단조증가수열이라면 그 배치한 수들 또한 단조증가하는 순서대로 나열되어야 함을 관찰하자.
따라서 다시 배치할 수들을 단조증가하는 순서대로 먼저 나열해두고, 주어진 배열이 단조증가수열인지 확인하는 것으로 문제를 해결할 수 있다. 이는 정렬을 통해 어렵지 않게 해낼 수 있다.
주어진 구간의 수의 최댓값과 최솟값을 구하고 (존재한다면) 주어진 구간의 앞의 값 및 뒤의 값과 비교하면 더 개선된 시간복잡도로도 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <algorithm>
using namespace std;
int N, L, R;
int A[100000];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> L >> R;
for (int i = 0; i < N; i++) cin >> A[i];
sort(A + L - 1, A + R);
for (int i = 0; i + 1 < N; i++) {
if (A[i] > A[i + 1]) {
cout << 0;
return 0;
}
}
cout << 1;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 32916 // C++] Another Brick in the Wall (1) | 2024.12.06 |
---|---|
[BOJ 32760 // C++] Nothing Everything (0) | 2024.12.05 |
[BOJ 32749 // C++] 타노수 (0) | 2024.12.03 |
[BOJ 32775 // C++] 가희와 4시간의 벽 1 (1) | 2024.12.02 |
[BOJ 32715 // C++] 십자 찾기 (0) | 2024.11.29 |