본문 바로가기

Pancake sorting by Iteration

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로 구현했다.

 

근데 다 하고 보니까 과제는 배열로 하는 거였다.

게다가 반복문 없이 재귀로만 구현하는 게 핵심인데 반복문으로 해버렸다.

 

ㅎㅎ

^^

호호

깔깔

 

공지를 잘 읽자.