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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
import java.util.ArrayList;
import java.util.List;
public class PancakeSort {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(0);
int len = 10;
//Randomly initialization
for(int i = 1; i <= len; i++) {
list.add(((int)((Math.random() * len) + 1)));
}
for(int i = 0; i < list.size(); i++) {
reverse(list, getIndexOfMax(list, i));
reverse(list, i);
}
reverse(list); //Ascending
printList(list);
}
private static final <E> boolean reverse(List<E> list) {
try {
reverse(list, 0);
return true;
} catch(ArrayIndexOutOfBoundsException e) {
return false;
}
}
private static final <E> boolean reverse(List<E> list, int beginIndex) {
try {
reverse(list, beginIndex, list.size() - 1);
return true;
} catch(ArrayIndexOutOfBoundsException e) {
return false;
}
}
private static final <E> boolean reverse(List<E> list, int beginIndex, int endIndex) {
try {
int len = (endIndex - beginIndex) / 2;
for(int i = 0;
i <= len;
list.set(beginIndex + i, list.set(endIndex - i, list.get(beginIndex + i++))));
return true;
} catch(ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
return false;
}
}
private static int getIndexOfMax(List<Integer> list, int beginIndex) {
return getIndexOfMax(list, beginIndex, list.size() - 1);
}
private static int getIndexOfMax(List<Integer> list, int beginIndex, int endIndex) {
int idx = -1;
int max = Integer.MIN_VALUE;
for(int i = beginIndex; i <= endIndex; i++) {
if(max < list.get(i)) {
idx = i;
max = list.get(i);
}
}
return idx;
}
private static <E> void printList(List<E> list) {
System.out.print("[ \"" + list.get(0) + "\"");
for(int i = 1; i < list.size(); System.out.print(", \"" + list.get(i++) + "\""));
System.out.println(" ]");
}
}
|
cs |
[충격] 과제 공지를 안 보고 과제를 하는 사람이 있다!?
친구가 팬케이크 정렬이라는 걸 구현하는 게 과제로 나왔다길래 일단 해봤다.
C나 Python으로 해볼까 했는데 예전에 Java로 짜놨던 $reverse(List\; \lt E\gt\; list,\; int\; beginIndex,\; int\;endIndex)$ 메소드를 활용하고 싶어서 Java의 List로 구현했다.
근데 다 하고 보니까 과제는 배열로 하는 거였다.
게다가 반복문 없이 재귀로만 구현하는 게 핵심인데 반복문으로 해버렸다.
ㅎㅎ
^^
호호
깔깔
공지를 잘 읽자.
'Programming > 과제' 카테고리의 다른 글
Pancake sorting by Recursion (0) | 2021.03.21 |
---|---|
재귀호출을 이용한 최소값 찾기, 총합 구하기, 선택 정렬 (0) | 2021.03.21 |
재귀함수를 이용한 최소공배수 구하기 (0) | 2021.03.08 |
재귀함수를 이용한 최대/최소값 구하기 (0) | 2021.03.08 |
엑셀 컬럼명 암호? (0) | 2021.02.15 |