This is an old revision of the document!


Algorithm

마방진 (Magic Square)

  • 홀수만 처리 가능!

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;
	}
}

합병 정렬 (Merge Sort)

이진 탐색 (Binary Search)

  • A < X ≤ B 조건을 검색.

	// A < X <= B
	public static int binarySearch(int[] arr, int target) {
		if(arr[arr.length - 1] < target)
			return arr.length - 1;
		
		int left = 0;
		int right = arr.length;

		int result = -1;
		
		while (left <= right) {
			int mid = (left + right) / 2;

			if (mid > 0) {
				
				int limit = arr[mid];
				
				if (arr[mid - 1] <= target && target <= limit) {
					
					//A < X <= B
					if(arr[mid] == target) {
						
						if(mid >= arr.length - 1) {
							result = mid;
						}
						else {
							result = mid + 1;
						}
					}
					else
						result = mid;
					
					
					break;
				}
				else if(target > limit)
					left = mid + 1;
				else if(target < limit)
					right = mid - 1;
				
			}
			else {
				//첫번째 index보다 작은 값일 때
				result = 0;
				break;
			}
		}
		
		return result;
	}

algorithm.1451218523.txt.gz · Last modified: 2021/02/07 03:15 (external edit)