https://www.acmicpc.net/problem/1377
똑같은문제:https://www.acmicpc.net/problem/15760
<문제설명>
무작위 배열이 주어진다. 몇번째 라운드에 버블소트가 종료되는지 구하라
<풀이>
원소가 스왑되어 움직이는 그림을 생각해 보자. 한 라운드에 원소는 우측으로는 제한없이 이동가능하지만, 왼쪽으로는 한 라운드에 최대 한 칸만 움직일 수 있다.
정렬 전 상태->정렬 후 상태를 비교했을 때 왼쪽으로 최대 이동한 원소의 이동횟수+1이 정답
<코드>
int main() {
int n,ans=0;
scanf("%d", &n);
vector<P> a(n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i].first);
a[i].second = i; // original
}
sort(a.begin(), a.end());
for (int i = 0; i < n; i++)
ans=max(ans,a[i].second-i);
printf("%d\n", ans + 1);
return 0;
}
'알고리즘 > 백준 & swacademy' 카테고리의 다른 글
BOJ 15757 - Out of sorts (세그 트리) (0) | 2020.02.20 |
---|---|
BOJ1517 - 버블소트 (inversion count) (0) | 2020.02.20 |
BOJ 15587 - Cow at Large (multisource bfs, dfs) (0) | 2020.02.19 |
BOJ 15586 - Moo tube ( 오프라인 쿼리, 유니온 파인드 ) (0) | 2020.02.19 |
BOJ 15475 - A pie for a pie (이분그래프, 이분탐색) (0) | 2020.02.18 |