전체 글 324

[고급 알고리즘] Dynamic Programming: Palindrome

1. Longest Palindrome Substring (LPS)주어진 문자열의 부분문자열에서 가장 큰 팰린드롬 문자열의 길이 구하기 Dynamic Programming시간 복잡도: O(n^2)공간 복잡도: O(n^2) 더보기public static void main(String... args) throws IOException { br = new BufferedReader(new InputStreamReader(System.in)); bw = new BufferedWriter(new OutputStreamWriter(System.out)); input = br.readLine().toCharArray(); size = input.length; isPalindrome = ne..

Algorithm 2024.11.20

[기초 알고리즘] 수학: 모듈러

3. 모듈러컴퓨팅에서 한 숫자를 다른 숫자로 나눈 후, 나머지를 반환한 값 a mod n(유클리드 나눗셈의) 나머지a: 피제수n: 제수a mod b = a - b * (a/b) 성질덧셈 법칙뺄셈 법칙곱셈 법칙분배 법칙 응용큰 수 연산암호학해시 함수: 데이터를 고정된 크기의 값으로 매핑할 떄 사용됨주기성 확인: 반복되는 패턴을 찾는 데 사용됨 고급페르마의 소정리소수로 모듈러 연산하였을 때 결과를 구하는 공식소수 p와 p에 나누어 떨어지지 않는 정수 a가 있을 때a^(p) = a (mod p)a^(p-1) = 1  (mod p)a^(p-2) = 1/a  (mod p)a^(p-2)는 a의 모듈러 역원a * a^(p-2) = 1 (mod p) 이므로 a^-1 (mod p) = a^(p-2) (mod p) 확장 ..

Algorithm 2024.10.26

[기초 알고리즘] 수학: 최대공약수

약수어떤 수를 나누어 떨어지게 하는 수 입니다.약수끼리 곱이 N이 되게끔 짝을 지을 수 있습니다. 최대공약수 (GCD)두 개 이상의 정수의 공통된 약수 중에서 가장 큰 수를 뜻합니다. 구현유클리드 알고리즘 (구현)두 수의 최대공약수는 작은수와 두 수를 나눈 나머지의 최대공약수와 같음더보기더보기더보기int gcd(int a, int b) { return b == 0 ? a : gcd(b, a%b);} 재귀적 구현이 가능합니다.가장 효율적입니다. 고급베주 항등식ax + by = gcd(a, b)위 식을 만족하는 x, y쌍이 항상 존재 (1개 이상)

Algorithm 2024.10.26

[고급 알고리즘] Graph(Shortest Path): Floyd-Warshall

1. Floyd-Warshall모든 정점 쌍 간의 최단 경로를 찾는 알고리즘 입니다. 가중치가 양수 혹은 음수인 그래프에서 사용됩니다. (단, 음의 사이클에는 사용 불가) Dynamic Programming인접행렬을 사용하여 각 정점 쌍 간의 최단 거리를 반복적으로 갱신합니다. 2. 동작 원리모든 정점을 경유지로 설정하고, 최단 경로가 경유지를 거쳐 더 짧아질 수 있는지 확인하며 최단 경로 갱신 초기화모든 정점 쌍에 대해, 직접 연결된 경로의 거리 초기화자기 자신으로 가는 경로 = 0연결되지 않은 경로 = infinit 경유지 검사i->j 로 가는 최단 경로가 i -> k -> j로 가는 경로를 통해 더 짧아질 수 있는지 검사 (정점 k를 경유지로 설정)모든 정점에 대하여 반복 3. 구현int[][] d..

Algorithm 2024.09.20

[고급 알고리즘] Greedy: Activity Selection Problem

1. Activity Selection Problem (활동 선택 문제)한 사람이 참여할 수 있는 최대 활동 수를 구하는 문제입니다.한 사람이 동시에 두 가지 활동을 참여할 수 없습니다. 해결 방법가장 먼저 끝나는 활동부터 선택합니다. 탐욕적 선택 속성현재 선택이 다음 선택의 기준에 영향을 미치지 않습니다.선택할 수 있는 가능 시간을 최대화하여, 남은 활동들을 선택할 수 있는 여지를 최대화합니다. 최적 부분 구조먼저 끝나는 활동을 선택하고, 남은 시간에 대해서도 동일한 방식을 적용할 수 있습니다.

Algorithm 2024.09.20

[알고리즘] Range: Sliding Window

1. Sliding Window선형 자료구조에서 특정 크기의 subarray를 찾는 알고리즘 입니다.일정한 크기의 구간을 움직여 찾습니다. 동작 원리윈도우 설정초기 윈도우 구간을 설정함 윈도우 이동한 번에 한 요소씩 이동시킴 (왼쪽 끝 제거 + 오른쪽으로 이동) 조건 확인각 윈도우가 특정 조건을 만족하는지 확인 장점성능슬라이딩 윈도우를 사용하면 O(n)브루트 포스일 경우, O(n^2) 메모리 효율성in-place 알고리즘 (새로운 배열 생성 X)  2. 문제subarrayMinimum Size Subarray Sum (문제) (해설)Longest Substring Without Repeating Characters (문제) (해설)

Algorithm 2024.09.19

[Real MySQL] 16-1. 복제

"Real MySQL" 책을 정리한 포스팅 입니다 1. 복제한 서버에서 다른 서버로 동기화되는 것 Source Server원본 데이터를 가진 서버변경이 최초로 이루어짐 (데이터 및 스키마) Replica Server복제된 데이터를 가진 서버소스 서버 동기화:소스 서버로부터 데이터를 전달받아 자신의 리포지토리에 반영 목적scale-out트래픽 대응 목적scale-up보다 훨씬 더 유연한 구조 backup데이터 정합성이 깨질 경우 (개발자 실수 or 공격 등)백업 서버의 데이터로 사용함메인 서버가 터질 경우지리적으로 분산된 백업 서버가 메인 서버의 역할을 대신함 데이터 분석용백업 서버에서 대신 담당하여 최적화데이터 분석은 리소스 소모가 큰 연산메인 서버로 데이터를 분석할 경우 클라이언트 요청 처리에 영향을 ..

Database/Mysql 2024.09.07

[Real MySQL] 8-0. 인덱스: Disk

"Real MySQL" 책을 정리한 포스팅 입니다 HDD (Hard Disk Drive)기계식 (플래터)데이터 보관플래터 위를 헤드가 이동하면서 데이터 읽고 씀 인터페이스SATA(소비자용)SAS(고성능) SSD (Solid State Drive)반도체기계식 플래터에 비해 훨씬 빠릅니다. (기계식으로 플래터를 회전시킬 필요 없음)소음 X 플래시 메모리 (NAND)비휘발성: 전원이 공급되지 않아도 데이터 보관 가능 O

Database/Mysql 2024.09.07