1. 문제
https://www.acmicpc.net/problem/2505
2. 코드
public static void main(String[] args) {
// int[] input = { 6, 7, 8, 2, 1, 5, 4, 3, 9, 10 };
// int[] input = { 6, 7, 4, 3, 2, 1, 5, 8, 9, 10 };
// int[] input = { 1, 2, 4, 3, 5, 6, 7, 9, 8, 10 };
// int[] input = { 1, 2, 8, 7, 5, 6, 4, 3, 9, 10 };
int[] input = { 1, 2, 3, 4, 7, 10, 9, 8, 5, 6 };
int[] reverse1 = null;
int[] reverse2 = null;
if (input[0] != 1) {
reverse1 = front(input);
} else {
reverse1 = back(input);
}
if (reverse1[0] != 1) {
reverse2 = front(reverse1);
} else {
reverse2 = back(reverse1);
}
for (int i : reverse2) {
System.out.print(i + " ");
}
}
public static int[] front(int[] input) {
boolean started = false;
int num = 0;
int start = 0;
int end = 0;
for (int i = 0; i < input.length; i++) {
if (!started && input[i] != i + 1) {
start = i;
num = i + 1;
started = true;
} else if (started && input[i] == num) {
end = i;
break;
}
}
int[] result = reverse(true, input, start, end);
System.out.println((start + 1) + " " + (end + 1));
return result;
}
public static int[] back(int[] input) {
boolean started = false;
int num = 0;
int start = 0;
int end = 0;
for (int i = input.length - 1; i >= 0; i--) {
if (!started && input[i] != i + 1) {
end = i;
num = i + 1;
started = true;
} else if (started && input[i] == num) {
start = i;
break;
}
}
int[] result = reverse(false, input, start, end);
System.out.println((start + 1) + " " + (end + 1));
return result;
}
public static int[] reverse(boolean front, int[] input, int start, int end) {
int[] result = input.clone();
if (front) {
for (int i = start; i < end + 1; i++) {
result[i] = input[end + start - i];
}
} else {
for (int i = end; i >= start; i--) {
result[i] = input[end + start - i];
}
}
return result;
}
