스타터 이해하기 스프링부트는 복잡한 라이브러리 관련 설정을 위해 스타터를 사용합니다. 스타터는 실행에 필요한 라이브러리들을 관련된 것끼리 묶어서 제공합니다. 만일 데이터베이스 연동을 위해 JPA 라이브러리만 다음과 같이 추가했다고 해봅시다. org.hibernate hibernate-entitymanager 5.4.32.Final 하지만 JPA와 연동하기 위해서는 하이버네이트말고도 spring-orm.jar 과 spring-data-jpa.jar와 같은 라이브러리가 추가적으로 필요합니다. 이러한 문제를 해결하기 위해 스프링부트는 관련된 라이브러리를 묶어 스타터로 제공합니다. org.springframework.boot spring-boot-starter-data-jpa POM파일 상속구조 스타터에는 ve..
WebApplicationType 스프링부트는 웹 애플리케이션이나 일반 자바 애플리케이션으로 실행가능합니다. 아무런 설정을 하지 않았을 때는 웹 애플리케이션으로 실행이 되어 내장된 톰캣서버가 실행됩니다. 일반 자바 애플리케이션으로 실행하기 위해서는 SpringApplication의 WebApplicationType을 NONE으로 수정해야합니다. 만일 값이 NONE이 아닌 SERVLET으로 되어있다면 다시 웹 애플리케이션으로 실행됩니다. @SpringBootApplication public class Chapter01Application { public static void main(String[] args) { SpringApplication application = new SpringApplicatio..
문제 https://www.acmicpc.net/problem/5214 알고리즘 BFS 풀이 역들을 잇는 하이퍼튜브들이 주어질 때, $N$역으로 가기 위해 거쳐야하는 최소 역의 수를 구하는 문제입니다. 하이퍼튜브마다 일일이 역들을 연결하게 되면 메모리초과가 발생합니다. 대신에 하이퍼튜브마다 임의의 정점을 하나씩 만든 후, 각 역과 새로 만든 임의의 정점끼리 연결하여 메모리를 절약하였습니다. 위 그림은 문제에서 주어진 첫번째 예시에서 첫번째 하이퍼튜브와 두번째 하이퍼튜브를 시각화한 것입니다. 저는 튜브마다의 임의의 정점을 100005+$i$로 하였습니다. 검은 실선을 가중치 1로 설정하여 풀고난 후, 마지막에 반을 나누어 실제로 거친 역의 수를 구했습니다. 코드 #include #define rep(i, ..
문제 https://www.acmicpc.net/problem/2437 알고리즘 Greedy 풀이 $N$개의 저울이 주어졌을 때, 잴 수 없는 무게의 최솟값을 구하는 문제입니다. 기존에 잴 수 있는 구간이 [0,R] 일 때, 새로운 추 A가 새로이 등장하면 새롭게 잴 수 있는 구간은 [A,A+R] 일 것입니다. 만일 R+1>=A 라면 이 구간은 [0,A+R]로 통합되어 잴 수 있는 구간이 새로이 갱신되겠지만 아니라면 답은 R+1입니다. 즉, 추의 무게를 정렬한 후 R과 추가할 추 A의 무게를 계속해서 비교해주면 됩니다. R은 잴 수 있는 무게의 최댓값이므로 지금까지의 추의 무게의 총합입니다. 코드 #include #define rep(i, n) for (int i = 0; i < n; ++i) #defi..
문제 https://www.acmicpc.net/problem/5917 알고리즘 Dijkstra 풀이 최단거리 중 하나의 간선의 값을 두배로 하였을 때의 최댓값을 구하는 문제입니다. 다익스트라임은 최단거리임을 보고 알 수 있습니다. 문제 제한은 $N$이 100 이하, $M$은 10000 이하입니다. 단순한 접근으로는 $M$의 간선들을 하나씩 두배로 만든 후 그때마다 새로이 다익스트라를 사용하는 것입니다. 하지만 $M$제한이 10000이므로 이 방법은 무리가 있습니다. 이 방법에는 불필요한 부분이 있습니다. 바로 최단거리에 포함되지 않는 간선들 또한 두 배로 바꾸는 것입니다. 이는 아무런 의미가 없는 행동입니다. $N$개로 이루어진 노드에서 최단거리는 최대 $N-1$개의 간선을 통해 이루어져 있습니다. 즉..
문제 https://www.acmicpc.net/problem/17612 알고리즘 Priority queue 풀이 문제에서 정의한 계산 순서를 구하는 문제입니다. 우선순위 큐를 이용한 구현문제에 가깝습니다. 빈 계산대가 여러 개 있다면 번호가 작은 계산대부터 계산해야 하므로 빈 계산대를 저장하는 $counter$변수, $info$ 클래스를 정의하여 각 아이디와 계산시간 및 카운터 정보를 기록하고 해당 클래스 객체의 우선순위를 위한 $compareInfo$ 클래스를 정의합니다. 다만, 우선순위큐를 통해 카운터에서 계산될 순서를 저장하게 될 때, 가장 빠르게 계산이 끝나는 $info$ 객체를 우선순위 큐에서 뽑았다면, 나머지 우선순위 큐 안에 있는 $info$ 객체의 $time$ 변수 또한 업데이트를 모두 ..
문제 https://www.acmicpc.net/problem/10652 알고리즘 Dijkstra, BFS 풀이 Bessie와 Elsie가 돌아다닐때 드는 에너지와 Piggy Back 상태에서 드는 에너지가 주어졌을 때, $N$까지 도달하기 위한 최소에너지는 구하는 문제입니다. 3인통화 문제와 굉장히 유사합니다. 도착지도 하나의 소처럼 취급을 하여 세 마리의 소에서 각각 다익스트라를 사용하면 문제가 해결됩니다. 다만, 각 소마다 그래프를 이동할 때 드는 비용은 동일하므로 다익스트라 대신 BFS를 사용하면 더 빠르게 문제를 풀 수 있습니다. 코드 #include #define rep(i, n) for (int i = 0; i < n; ++i) #define REP(i, n) for (int i = 1; i..
문제 https://www.acmicpc.net/problem/9869 알고리즘 Greedy 풀이 소마다 우유생산량과 수명이 주어질 때, 최대 우유생산량을 구하는 문제입니다. 자주 보이는 그리디 테크닉입니다. 시간을 0부터 접근하는 대신, 가장 마지막 시간부터 0까지 역순으로 소들을 고려합니다. T에 해당하는 시간에 젖을 짤 수 있는 소들을 PQ에 넣습니다. 이렇게 하면 현재 젖을 짤 수 있는 소들이 PQ에 담기게 됩니다. 이 가운데 우유 생산량이 높은 소부터 젖을 짜나가면 됩니다. 코드 #include #define rep(i, n) for (int i = 0; i N; vector vt; rep(i, N) { int..
- Total
- Today
- Yesterday
- 트라이
- 동적계획법
- sweeping
- SCC
- 이분매칭
- bfs
- 좌표압축
- greedy
- 2-SAT
- knapsack
- implementation
- Segment tree
- Oracle
- Fenwick
- 세그먼트트리
- union find
- sorting
- 정렬
- hld
- DP
- string
- 스위핑
- dijkstra
- 이분탐색
- kmp
- spring
- Suffix Array
- spring boot
- dfs
- 펜윅트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |