전체 글 315

[Spring Data JPA] 3-1. Defining Query Methods (1)

1. Query Lookup Strategies@EnableJpaRepositories (queryLookupStrategy)CREATE_IF_NOT_FOUND (default)선언된 쿼리 -> 쿼리 생성 (메서드 이름 기반) CREATE쿼리 생성메서드 이름 기반 (접두사 제외) USE_DECLARED_QUERY선언된 쿼리를 찾으려 시도 (어노테이션)찾을 수 없으면 예외 발생 (부트스트랩 시점) 2. Query CreationQuery Builder MechanismJPQL Query Creation from method nameinterface PersonRepository extends Repository { // 여러 조건을 사용한 쿼리 List findByEmailAddressAndLastna..

[Spring Data JPA] 3-7. Repository query keywords

1. Supported query method subject keywordsfind…Byread…Byget…Byquery…Bysearch…Bystream…ByGeneral query method - can be used in combination with additional keywordsReturn type: the repository type- Collection, Streamable subtype, result wrapper (Page, GeoResults, store-specific)exists…ByExists projectionReturn type: booleancount…ByCount projectionReturn type: booleandelete…Byremove…ByDelete que..

[고급 알고리즘] Dynamic Programming: Travelling salesman problem

1. Travelling salesman problem 여러 도시들이 있고 한 도시에서 다른 도시로 이동하는 비용이 모두 주어졌을 떄, 모든 도시들을 단 한 번만 방문하고 원래 시작점으로 돌아오는데 드는 최소 거리 구하기 그래프 이론 각 변에 가중치가 주어진 완전 그래프에서 가장 작은 가중치를 가진 해밀턴 순환 구하기 2. brute-force (permutation. NP) time complexity $O(n!)$ 3. dynamic programming (Held-Karp algorithm) 동작 원리 초기화 모든 도시를 1부터 n까지 번호 매기기 임의의 도시를 시작점으로 선택 상태 정의 $g(S, e)$ : 출발지에서 S에 포함된 모든 도시를 거쳐 e에 도달하는 최단 경로의 길이 최솟값 계산 (재..

Algorithm 2024.03.01

[고급 알고리즘] Dynamic Programming: Longest Common Subsequence

1. Longest Common Subsequence (LCS. 최장 공통 수열) 주어진 수열들의 부분 수열이 되는 수열들, 중 가장 긴 것을 찾는 문제입니다. 점화식 ${\displaystyle LCS\left(X_{i},Y_{j}\right)={\begin{cases}\emptyset &{\mbox{ if }}\ i=0{\mbox{ or }}j=0\\{\textrm {}}LCS\left(X_{i-1},Y_{j-1}\right)+1&{\mbox{ if }}x_{i}=y_{j}\\{\mbox{longest}}\left(LCS\left(X_{i},Y_{j-1}\right),LCS\left(X_{i-1},Y_{j}\right)\right)&{\mbox{ if }}x_{i}\neq y_{j}\\\end{cas..

Algorithm 2024.03.01

[고급 알고리즘] Dynamic Programming: Knapsack Problem

1. Knapsack Problem (배낭 문제) 베낭에 담을 수 있는 최대 무게가 정해져 있고, 가치와 무게가 있는 짐들을 배낭에 넣을 때 가치의 합이 최대가 되도록 짐 채우기 점화식 $m[0, w] = 0$ $m[i, w] = m[i-1, w] \quad \text{if } w_{i} > w$ $m[i, w] = \max(m[i-1, w], m[i-1, w-w_{i}] + v_{i}) \quad \text{if } w_{i} \leqslant w$ 2. 풀이 코드 costs = new int[N+1]; volumes = new int[N+1]; dp = new int[N+1][K+1]; for (int item = 1; item

Algorithm 2024.03.01

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

1. Fibonacci (피보나치 수열) 직전 두 항의 합인 수열입니다. (첫째항과 둘째항은 1) 점화식 $fib(n) = fib(n-1) + fib(n-2)$ 예시: $fib(5)$ $fib(4)+fib(3)$ $(fib(3)+fib(2)) + (fib(2)+fib(1))$ $((fib(2)+fib(1)) + (fib(1)+fib(0))) + ((fib(1)+fib(0)) + fib(1)$ $(((fib(1)+fib(0)) + fib(1)) + (fib(1)+fib(0))) + ((fib(1)+fib(0)) + fib(1))$ 2. 풀이 코드 public int fibDP(int n) { if (n>3 && memo[n] == NOT_UPDATED) memo[n] = fibDP(n-1) + fibDP(..

Algorithm 2024.03.01

[기초 알고리즘] 수학: 멱집합

1. 멱집합 (Power Set)임의의 집합 S에서 모든 부분 집합들로 구성된 집합입니다.${\displaystyle {\mathcal {P}}(S)=\{A\colon A\subseteq S\}}$ 코드더보기private void powerset(int depth) { if (depth == size) { List temp = new ArrayList(); for (int i = 0; i  예${\displaystyle \{a,b\}}$의 멱집합${\displaystyle {\mathcal {P}}(\{a,b\})=\{\varnothing ,\{a\},\{b\},\{a,b\}\}}$ ${\displaystyle \{a,b,c\}}$의 멱집합${\displaystyle {\m..

Algorithm 2024.02.25