백준15887 욱제는 결벽증이야!!

문제 링크

  • http://icpc.me/15885

문제 출처

  • 제2회 천하제일 코딩대회 예선 C번

사용 알고리즘

  • 정렬

시간복잡도

  • O(n2)

풀이

L < R인 구간 [L, R]을 뒤집을 수 있다는 것은 [x, x+1]을 swap할 수 있다는 의미입니다.
버블 정렬의 swap 횟수와 그 때의 인덱스만 출력해주면 됩니다.

전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <bits/stdc++.h>
using namespace std;

struct asdf{
	int a, b;
};
asdf ans[1000010];

int main(){
	int n; scanf("%d", &n);
	int arr[1010]; for(int i=1; i<=n; scanf("%d", &arr[i++]));

	int idx = 0;

	for(int i=1; i<=n; i++){
		for(int j=1; j<n; j++){
			if(arr[j] > arr[j+1]){
				ans[idx].a = j, ans[idx++].b = j+1;
				swap(arr[j], arr[j+1]);
			}
		}
	}

	printf("%d\n", idx);
	for(int i=0; i<idx; i++) printf("%d %d\n", ans[i].a, ans[i].b);
}