Algorithm (35) 썸네일형 리스트형 Line Sweep 알고리즘 (백준 : 2261) JAVA https://www.acmicpc.net/problem/2261 2261번: 가장 가까운 두 점 첫째 줄에 자연수 n(2 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 줄에는 차례로 각 점의 x, y좌표가 주어진다. 각각의 좌표는 절댓값이 10,000을 넘지 않는 정수이다. 같은 점이 여러 번 주어질 수도 있다. www.acmicpc.net 기본적인 방법 아래는 가장 기본적으로 N개의 점중 2가지를 선택해서 거리를 비교하는 방법이다. 가장 무식한 방법이며 시간복잡도는 O(N^2) 이다 .따라서 N값이 조금이라도 커진다면 문제를 해결할 수가 없다. 그래서 필요한것이 LineSweep 이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2.. Upper Bound, Lower Bound 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class LowerUpper { public static int upperBound(int arr[],int front, int rear, int key) { int mid; while(front JAVA : LinkedList , ArrayList 순환도중에 값 삭제하기 일반적으로 for 안에 arraylist를 순환하면서 삭제하게된다면 현재값이 사라지게되어 다음값을 참조할수 없게된다. 이럴 경우에는 Iterator를 이용하면 쉽다. 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 package LineSweep; import java.util.Iterator; import java.util.LinkedList; public class LinkedListTest { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add(2); list.add(3); list.add(5); lis.. 알고리즘 공부순서 백준참고 https://offline.startlink.help/hc/ko/articles/217245158 알고리즘 정기 강의 커리큘럼 (2018년까지) 2018년까지 사용한 알고리즘 정기 강의의 커리큘럼 입니다. 1. 알고리즘과 입/출력 먼저 알고리즘이 무엇인지에 대해서 간략하게 배웁니다. 그 다음, 알고리즘을 공부하는 방법을 배웁니다. 알고리즘에서 가장 중요한 것은 시간이 얼마나 걸릴지 예측하는 능력이기 때문에, 시간 복잡도를 가장 첫 번재로 배웁니다. 알고리즘은 문제 풀이를 통해서 공부하는 것... offline.startlink.help LCA 작성예정 피사노주기 백준에서의 소스코드와 설명이다. 사실상 알고리즘을 알아야 풀수 있는 문제이다. 이때 주목할점은 구해야할값이 N이고 주기가 P 라고 할경우 Answer[N] = Answer[N%P] 와 같다는것을 알수가 있다. 예를들어 주기가 3인 문제가잇다 0 1 2 0 1 2 0 1 2 0 1 2 이런 배열이잇다. 여기서 n =4 일때를 구하고싶으면 정답은 1이다 실제로 arr[1] = arr[4] = 1 인걸 알수가있다. 페르마의 소정리 , 확장 유클리드 페르마의 소정리 https://www.youtube.com/watch?v=uJAoaIeOXJM 확장 유클리드 Ax + By = GCD(A,B) 가 있을때 만족하는 정수 x, y를 찾는 방법 방법 두가지 있음. while 반복문을 이용한 방법. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 static void Uclede(long a, long b) { // Ax + By = 1 만족하는거 찾기 long s[] = new long[2]; long t[] = new long[2]; s[0] = 1; t[0] =0; s[1] = 0; t[1] = 1; while(a %b != 0) { long ss = s[0] - (a/b)*s[1]; lon.. JAVA : heap (삽입,삭제) 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 package study; public class HeapTest { static int size =1; static int heap[] = new int[100]; static void insert(int item) { int i = ++size; while(i!=1 && heap[i/2] 이전 1 2 3 4 5 다음