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; }