전체 글 80

[자바정렬] Arrays.sort() Collections.sort()

1차원 배열 오름차순 정렬// 1차원 배열 오름차순 Sortint[] nums = { 2, 4, 9, 8};Arrays.sort(nums);System.out.println(Arrays.toString(nums));//결과 [2, 4, 8, 9] 1차원 배열 내림차순 정렬 (for문 활용)// 1차원 배열 내림차순 Sort   int[] nums = { 2, 4, 9, 8};        Arrays.sort(nums);        for(int i=0; i   1차원 배열 Stream 정렬 // 1차원 배열 내림차순 Sort   int[] nums = { 2, 4, 9, 8};   int[] descNums = Arrays.stream(nums)                   .boxed().sor..

알고리즘 2024.08.06

[수학1]소수

Prime Number 소수 : 약수가 1과 자기 자신 밖에 없는 수 N 이 소수가 되려면, 2보다 크거나 같고 , N-1 보다 작거나 같은 자연수로 나누어 떨어지면 안된다. 1 부터 100 까지 소수 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 소수와 관련된 알고리즘은 두가지가 있다. 1. 어떤 수 N 이 소수인지 아닌지 판별하는 방법 2. N 보다 작거나 같은 모든 자연수 중에서 소수를 찾아내는 방법(N 이하의 소수를 찾아내는 방법) 방법 1.소수의 정의를 이용한 풀이_시간복잡도 O(N) public static boolean isPrime(int a){ if (a == 1){ return false; } for (in..

알고리즘 2022.07.26

[수학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