Both sides previous revisionPrevious revisionNext revision | Previous revision |
algorithm [2016/02/27 05:21] – [이진 탐색 (Binary Search)] ledyx | algorithm [2021/02/07 03:15] (current) – external edit 127.0.0.1 |
---|
= Algorithm = | ~~REDIRECT>algorithm:algorithm~~ |
| |
{{tag>Algorithm}} | |
| |
= 마방진 (Magic Square) = | |
* 홀수만 처리 가능! | |
<sxh java ; title:Language : Java> | |
int size = 5; | |
| |
int[][] arr = new int[size][size]; | |
| |
int middle = size/2; | |
| |
int i=0, j=middle; | |
for(int num=1 ; num<=size*size ; num++) { | |
arr[i][j] = num; | |
| |
//행 감소 | |
i--; | |
if(i < 0) | |
i = size-1; | |
| |
//열 증가 | |
j = (++j)%size; | |
//아래 표현과 같다. | |
/*j++; | |
if(j >= size) | |
j = 0;*/ | |
| |
//배수이면 행은 1 증가, 열은 그대로 | |
if(num%size == 0) { | |
i = (i+2)%size; | |
j--; | |
if(j < 0) | |
j = size-1; | |
} | |
} | |
</sxh> | |
| |
= 합병 정렬 (Merge Sort) = | |
[[Merge Sort]] | |
| |
= 이진 탐색 (Binary Search) = | |
* A < X ≤ B 조건을 검색. (반환값이 index+1 이므로) | |
<sxh java> | |
public static int binarySearch(ArrayList<Integer> list, int target) { | |
| |
int left = 0; | |
int right = list.size() - 1; | |
int middle = 0; | |
| |
while(left <= right) { | |
| |
middle = (left + right) / 2; | |
| |
if(target < list.get(middle)) { | |
right = middle - 1; | |
} | |
else { | |
left = middle + 1; | |
} | |
| |
| |
if(list.get(middle) <= target && middle < list.size() - 1) { | |
if(target < list.get(middle + 1)) { | |
return list.get(middle + 1 >= list.size() ? middle : middle + 1); | |
} | |
} | |
} | |
| |
return -1; | |
} | |
</sxh> | |