전체 글 125

[수학1]최소공배수

Least Common Multiple 최소공배수는 줄여서 LCM 이라고 한다. 두 수의 최소공배수는 두 수의 공통된 배수 중에서 가장 작은 정수이다. 최소 공배수는 GCD (최대 공약수)를 응용해서 구할 수 있다. A x B = GCD * LCM (두 수의 곱은 최소공배수와 최대공약수를 곱한 값과 같다.) 두 수 a,b 의 최대공약수를 g 라고 했을 때 최소공배수 I =(a*b)/g 이다. https://www.acmicpc.net/problem/2609

알고리즘 2022.07.25

[수학1]최대공약수

Greatest Common Divisor 최대 공약수를 줄여서 GCD 라고 쓴다. 두 수 A 와 B 이 최대공약수 G는 A 와 B 의 공통된 약수 중에서 가장 큰 정수이다. 최대공약수를 구하는 가장 쉬운 방법은 2 부터 min(A,B)까지 모든 정수로 나누어 보는 방법 최대공약수가 1인 두 수를 서로소(Comprime)라고 한다. 방법 1 . 작은 수 부터 차례로 계산해보기 int g =1; for (int i=2; i b) { small = b; }else { small = a; } for (int i=small; i > 0; i--) { if ((a % i == 0) && (b % i == 0) ){ return i; } } return -1; } 방법 3. 유클리드 호제법 위의 두 방법보다 빠른 ..

알고리즘 2022.07.25

[수학1]나머지 연산

컴퓨터의 정수는 저장할 수 있는 범위가 저장되어 있기 때문에, 답을 M 으로 나눈 나머지를 출력하라는 문제가 등장한다. (A +B ) mod M = ((A mod M) + (B mod M)) mod M (A x B) mod M = ((A mod M) x (B mod M)) mod M 나눈 기의 경우에는 성립하지 않는다. (Modular Inver 를 구해야 함) 뺄셈의 경우에는 먼저 mod 연산을 한 결과가 음수가 나눌 수 있기 때문에 다음과 같이 해야 한다. (A-B) mod M = ((A mod M ) - (B mod M)+M)mod M ex ) (6-5)%3 = 1%3=1 이다 ex) (6%3 - 5%3)%3 = (0 - 2)%3 = -2 %3 = ? -- 음수의 경우 결과의 부호가 프로그래밍 언어..

알고리즘 2022.07.25

[알고리즘] - 시작 Java 입출력

Java 에서 입력은 Scanner, 출력은 System.out 을 사용한다 입력 : Scanner sc = new Scanner (System.in); (편리성) 입력은 많은 경우에는 속도가 느리기 때문에, BufferedReader 를 사용한다 BufferdReader br = new BufferdReader(new InputStreamReader(System.in));(속도 빠름) 출력이 많은 경우에는 StringBuilder 를 사용해서 한 문자열로 만들어서 출력을 한 번만 사용하거나 BufferedWriter 를 사용한다 ex) input 10,000 이하의 자연수 10,000,000 개가 적힌 파일을 입력받는데 걸리는 시간 Java (BufferedReader): 0.6585초 Java (Sc..

알고리즘 2022.05.29

[알고리즘] 시작 - 시간 복잡도

알고리즘 시간 복잡도를 이용하면 작성한 코드가 시간이 대략 얼마나 걸릴지 예상 할 수 있다. 시간 복잡도는 소스를 보고 계산할 수도 있고, 소스를 작성하기 전에 먼저 계산해볼 수 있다. 문제를 풀기 전에 먼저 생각한 방법의 시간 복잡도를 계산해보고 이게 시간 안에 수행될 것 같은 경우에만 구현하는 것이 좋다. 문제의 크기 입력범의의 가장 큰 수를 시간복잡도에 대입하여 그 값에 따라 구현여부를 결정함 ex) 1억 -> 1초 n 1-->0.00~1초 (아주 작은 초) 너무 빨라서 무시할수 있는 수 O(N) ->10만 ->0.001초 O(N^2) ->100억 --> 100초 시간 복잡도 안에 가장 큰 입력 범위를 넣었을 때, 1억이 1초 정도이다 이 값은 대략적인 값으로, 실제로 구현해보면 1억을 조금 넘어도..

알고리즘 2022.05.29