
REMIND: scanner vs buffered
scanner: 문자가 입력될 때마다 cpu에서 하나씩 입출력을 한다.
buffered: 버퍼에 일정 용량이 가득 차거나 개행 발생 시(or 인위적 flush), 입출력 처리
상수 시간: O(1)
private static int getFirst(int[] arr) {
return arr[0];
}
로그 시간: O(log n)
private static int binarySearch(int[] arr, int target) {
// 배열을 오름차순 정렬하고 시작
Arrays.sort(arr); // 퀵정렬(nlogn), 정렬되었음을 알고리즘 시작 전에 가정
int left = 0, right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if(arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
// 찾고자 하는 값이 배열에 없다면 -1을 반환
return -1;
}
선형 시간 O(n)
public static int[] reverse(int[] arr) {
int[] reversed = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
reversed[arr.length - 1 - i] = arr[i];
}
return reversed;
}
지수 시간 O(2^n)
public static int fibonacci(int n) {
if(n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
Bubble sorting(버블 정렬)
Selected sotring(선택 정렬)
Insert sorting(삽입 정렬)
Quick sorting(퀵 정렬)
Merge Sort(병합 정렬)