1. 최소값 찾기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.util.Arrays;
public class Minimum {
public static void main(String[] args) {
int len = 10;
int[] arr = new int[len];
for(int i = 1; i <= len; i++)
arr[i - 1] = ((int)((Math.random() * len) + 1));
System.out.println(Arrays.toString(arr));
System.out.println("Minimum: " + min(arr, len - 1));
}
public static int min(int[] arr, int n) {
if(n == 1) {
return (arr[0] < arr[1]) ? arr[0] : arr[1];
} else {
int m = min(arr, n - 1);
return (arr[n] < m) ? arr[n] : m;
}
}
}
|
cs |
시간 복잡도: $O(n)$
2. 총합 구하기
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
|
import java.util.Arrays;
public class Summation {
public static void main(String[] args) {
int len = 10;
int[] arr = new int[len];
for(int i = 1; i <= len; i++) {
arr[i - 1] = i;
}
int sum = sum(arr, len - 1);
System.out.println(Arrays.toString(arr));
System.out.println("Sum: " + sum);
}
public static int sum(int[] arr, int n) {
if(n == 1) {
return (arr[0] + arr[1]);
} else {
return (arr[n] + sum(arr, n - 1));
}
}
}
|
cs |
시간 복잡도: $O(n)$
3. 선택 정렬
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
|
import java.util.Arrays;
public class SelectionSort {
public static void main(String[] args) {
int len = 10;
int[] arr = new int[len];
for(int i = 1; i <= len; i++) {
arr[i - 1] = ((int)((Math.random() * len) + 1));
}
System.out.println(Arrays.toString(arr));
sort(arr, len - 1);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] arr, int beginIdx) {
if(beginIdx > 0) {
sort(arr, beginIdx - 1);
}
int m = minIdx(arr, beginIdx);
int temp = arr[beginIdx];
arr[beginIdx] = arr[m];
arr[m] = temp;
}
public static int minIdx(int[] arr, int beginIdx) {
if(beginIdx == arr.length - 1) {
return (arr.length - 1);
} else {
int m = minIdx(arr, beginIdx + 1);
if(arr[beginIdx] < arr[m]) {
return beginIdx;
} else {
return m;
}
}
}
}
|
cs |
시간 복잡도: (여전히) $O(n^2)$
운이 좋았다. 예전에 재귀로 최소값 구하는 걸 구현해놨었는데(https://t0pli.tistory.com/171), 이번 과제는 여기서 응용하는 것 뿐이었다.
최소값 구하는 걸 해놓으니까 총합 구하는 건 거의 바로 구현했다.
선택 정렬이 좀 어렵긴 했지만 어차피 중요한 건 최소값의 인덱스를 찾는 거고, 결국 최소값 구하기의 응용일 뿐이라 생각보다는 빨리 끝냈다.
'Programming > 과제' 카테고리의 다른 글
[과제] Divide and conquer (1) | 2021.05.21 |
---|---|
Pancake sorting by Recursion (0) | 2021.03.21 |
Pancake sorting by Iteration (0) | 2021.03.16 |
재귀함수를 이용한 최소공배수 구하기 (0) | 2021.03.08 |
재귀함수를 이용한 최대/최소값 구하기 (0) | 2021.03.08 |