영속성 컨텍스트 영속성 컨텍스트는 EntityManager을 생성할 때 같이 생성되는 논리적인 개념입니다. 일종의 엔티티 객체들을 담는 컨테이너라고 이해하면 됩니다. 컨텍스트와 엔티티 사이에 네가지 상태가 있을 수 있습니다. 비영속(new) 엔티티를 생성만 했을 뿐, 아직 영속성 컨텍스트에 저장하지 않은 상태입니다. 영속(managed) EntityManager을 통해 엔티티가 영속성 컨텍스트에 등록된 상태를 의미합니다. 엔티티를 영속 상태로 만들기 위해 persist 메서드를 사용합니다. find를 통해서도 엔티티를 영속 상태로 만들 수 있습니다. 찾고자 하는 엔티티가 영속성 컨텍스트안에 존재하지 않는다면 데이터베이스에 접근해 데이터를 얻어온 후 해당 정보를 토대로 엔티티 객체를 만든 후 영속성 컨텍스..
문제 https://www.acmicpc.net/problem/8980 알고리즘 Greedy 풀이 1부터 N까지 트럭이 이동하며 배송을 할 때, 최대 배송량을 구하는 문제입니다. 1마을에서 모든 택배를 들고 있을 때, 포기 해야하는 택배는 1마을로부터 가장 먼 택배들입니다. 이 택배는 오래 들고 있을수록 중간마을에서의 배송을 방해하기 때문입니다. 도착마을을 기준으로 오름차순으로 정렬하여 다른 택배들에게 영향을 덜 주는 순서대로 처리해나가면 풀 수 있습니다. 영향을 준다는 것은 현재 처리하고 있는 택배의 도착지가 다른 택배들의 시작점과 도착점 사이에 있다는 것인데 도착마을을 기준으로 오름차순 정렬하면 이와 같은 일이 최소화 됩니다. 코드 #include #define rep(i, n) for (int i ..
문제 https://www.acmicpc.net/problem/1231 알고리즘 knapsack 풀이 $D$일동안 갯수제한없는 knapsack을 하는 문제입니다. 그리디한 DP임을 눈치채야 풀 수 있습니다. A일에 사서 B일에 파는 것은 A+1일에 해당 주식을 팔지 말지 결정하고 팔았다면 무조건 재매수를 하는 것을 B일까지 반복하는 것과 동일합니다. 만일 10 15 20에 해당하는 주식이 있다면 10에 주식을 사서 3일째 되는 날 20에 팔아 10의 이득을 챙기는 것과 2일째에 15에 팔고 다시 15에 사서 20에 파는 것은 동일합니다. 즉 갯수제한이 없는 knapsack을 D-1일 동안 하는 것과 동일한 문제로 바뀌게 됩니다. $cache[i]$= 현재 사용가능한 돈이 $i$원일때, 얻을 수 있는 최대..
데이터베이스 연동 데이터베이스 연동에 사용되는 기술은 JDBC, 마이바티스, 하이버네이트와 같은 ORM에 이르기까지 매우 다양합니다. 특히 하이버네이트 같은 경우는 개발자가 직접 SQL을 작성하지 않아도 된다는 점에서 굉장히 편리합니다. 이후 여러 ORM이 등장하고 이를 표준화 한것이 JPA 입니다. 스프링 데이터 JPA는 복잡한 JPA를 간단하게 사용할 수 있게 해주는 스프링 모듈입니다. 연동 기술은 크게 SQL을 직접 다루는 기술과 프레임 워크가 SQL을 생성해주는 기술로 나눌 수 있습니다. 마이바티스는 SQL을 XML 파일에 직접 저장하여 사용하게 됩니다. 만일 추가적인 기능이 필요해 SQL을 수정하게 된다면 해당 SQL을 사용하는 코드또한 수정되어 번거롭습니다. 하지만 SQL을 직접 다루지 않는 ..
문제 https://www.acmicpc.net/problem/12865 알고리즘 knapsack 풀이 갯수제한이 있는 01 knapsack 문제입니다. $cache[i]$=현재 담은 무게가 $i$ 일때 얻을 수 있는 최대가치 안쪽 포문을 역순으로 고려하면 갯수를 하나 택할 때 상황만을 고려할 수 있습니다. 코드 #include #define rep(i, n) for (int i = 0; i N >> K; rep(i, N) rep(j, 2) cin >> bag[i][j]; rep(i, N) { for (int j = K; j >= bag[i][0]; --j) { cache[j] = max(cache[j], cache[j..
문제 https://www.acmicpc.net/problem/6066 알고리즘 Knapsack 풀이 갯수제한이 없는 01 Knapsack 문제입니다. $cache[i][j]$ = $i$번째 물건까지 택하고 현재 얻은 hay양이 $j$ 일때 지불해야하는 최소 금액 으로 가정하면 풀 수 있습니다. $cache[i][j]$가 갱신하는 다음 상태는 현재 상태에서 hay를 구매했을때 상태인 $cache[i][j+hay]$ 와 현재 물건을 택하지 않고 다음 물건을 택하는 $cache[i+1][j]$가 있습니다. 코드 #include #define rep(i, n) for (int i = 0; i N >> H; rep(i, N) ..
문제 https://www.acmicpc.net/problem/7045 알고리즘 DFS 풀이 각 정점을 루트로 했을 때, 서브트리 크기의 최댓값이 절반 이하가 되는 정점을 찾는 문제입니다. 문제에서 주어진 $N$ 제한은 1만이므로 각 정점마다 DFS를 돌리면 $O(N^2)$ 이므로 시간초과를 받게 됩니다. 한 정점에서 DFS를 시작하여 임의의 정점에 도달했을 때, 해당 정점의 서브트리의 크기는 재귀적으로 찾을 수 있습니다. 추가적으로 고려해야할 것은 현재까지 탐색한 트리의 크기입니다. 이 정보는 현재까지 탐색했던 트리를 제외한 서브트리 크기의 총합을 안다면 $N-sum[i]$를 통해 구할 수 있습니다. $sum[i]$는 서브트리크기의 총합을 의미합니다. DFS를 수행한 후 각 정점마다 $MAX[i]$ 값..
스프링 부트 로깅 애플리케이션을 운용하며 문제가 발생하면 로그 메세지를 보게 됩니다. 에러가 발생할때 뿐만 아니라 애플리케이션의 성능을 분석하는데에도 쓰는 등 다양한 용도로 사용됩니다. 마켓플레이스에서 ANSI Esacpe in Console을 설치하여 메인함수를 실행하면 로그 레벨별로 색깔이 구분되어 표기됩니다. Level Color 의미 1. ERROR Red 사용자 요청을 처리하는 중 문제 발생 2. WARN Yellow 현재는 처리가능, 향후 문제가능성 존재 3. INFO Green 상태변경과 같은 정보성 메세지 4. DEBUG Green 개발 시 디버깅 목적 5. TRACE Green DEBUG 레벨보다 더 상세한 메세지 로그 레벨은 우선순위가 정해져 있어 특정 로그 레벨을 지정하면 해당 레벨을..
- Total
- Today
- Yesterday
- greedy
- 세그먼트트리
- dijkstra
- union find
- 스위핑
- 2-SAT
- 이분탐색
- hld
- sweeping
- 좌표압축
- Fenwick
- bfs
- DP
- kmp
- string
- SCC
- spring
- implementation
- 정렬
- Segment tree
- 트라이
- Oracle
- spring boot
- dfs
- Suffix Array
- 이분매칭
- knapsack
- 펜윅트리
- sorting
- 동적계획법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |