문제 www.acmicpc.net/problem/21232 알고리즘 queue 풀이 $N$마리의 소가 차례대로 목장에 추가가 됩니다. 소의 주변에 3마리의 소가 있으면 소는 Comfortable한 상태로 됩니다. 이 상태에선 우유생산을 제대로 하지 못하므로 새로운 소를 추가해서 이를 방지하려 합니다. 이때 새로이 추가해야하는 소의 마릿수를 정해진 소를 추가할때마다 구하는 문제입니다. $adj[i][j]$는 $(i, j)$에 살고 있는 소의 인접한 소의 마릿수를 나타내는 배열입니다. 정해진 소를 추가할때마다 영향을 미치는 좌표는 해당 소의 상하좌우에 있는 좌표입니다. 영향을 받는 좌표들이 있다면 해당 좌표들의 $adj$값이 3인지 확인해주고 3이라면 큐에 넣어줍니다. 큐는 comfortable한 상태들의 ..
문제 www.acmicpc.net/problem/12003 알고리즘 Segment tree 풀이 두 개의 진열장에 다이아몬드를 진열하려 합니다. 같은 진열장 내에 있는 다이아몬드들은 그 크기의 차이가 $K$이하일 때만 진열이 가능합니다. 이러한 조건에서 진열할 수 있는 다이아몬드의 최대 갯수를 구하는 문제입니다. $N$제한이 5만이므로 $O(NlogN)$에 해당하는 알고리즘을 떠올려야합니다. 주어지는 다이아몬드의 크기를 정렬한 후 앞에서부터 크기의 차이가 $K$이하가 되도록 골라봅시다. $i$번째 다이아몬드부터 $i+j$번째 다이아몬드를 하나의 진열장에 넣었다면 $i+j+1$번째 다이아몬드부터 마지막 다이아몬드까지 어느 연속된 부분을 나머지 하나의 진열장에 넣어야합니다. 만약 각 다이아몬드를 선택했을 때..
문제 www.acmicpc.net/problem/20648 알고리즘 DP, 좌표압축 풀이 $N$개의 소들의 좌표가 주어질 때, 직사각형 울타리로 가둘 수 있는 소들의 집합의 수를 구하는 문제입니다. 두마리 이상의 소들을 울타리 안에 넣을 때가 문제가 됩니다. 만약 임의의 소 두마리를 고른 후 그 소들을 포함한 집합의 수를 셀 때, 답에 영향을 주는 소들의 위치는 다음 그림에서 노란색 부분과 같습니다. 화살표는 두 소의 위치를 나타낸 것입니다. 아래 노란색 사각형에서 소가 몇마리인지 세고 위에 노란색 사각형에서 소가 몇마리인지 센 후, 두 수를 곱하게 되면 선택한 두 소를 포함한 집합의 수를 구할 수 있습니다. 이 과정을 수행하기 위해 소들의 좌표를 압축한 후 $board$배열을 통해 원하는 사각형에 포함..
AOP Aspect Oriented Programming의 약자입니다. aspect는 부가기능을 의미합니다. 즉 여러객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법입니다. 스프링은 이를 proxy객체를 사용함으로써 aop를 실현합니다. AOP 주요 용어들 Target 부가기능을 부여할 대상 객체를 의미합니다. 스프링에서는 주로 Service 객체들이 이에 해당합니다. Advice 실질적인 부가기능을 담은 구현체를 의미합니다. Aspect가 언제 무엇을 할지를 결정합니다. '언제'에 따라 advice는 5가지 종류로 나눌 수 있습니다. JoinPoint 프로그램의 실행중 Advice가 삽입될 수 있는 모든 위치들을 의미합니다. 메서드 호출, 예외 호출 등이 이에 해당하며..
AOP를 위한 모듈 추가 aop 프로그래밍을 위해서 추가해야하는 모듈은 spring-aop와 aspectjweaver 모듈입니다. 각각은 AOP의 실행과 설정에 필요한 모듈입니다. spring-context를 추가할 때, spring-aop 모듈 또한 적용이 되므로 aspectjweaver을 dependency에 추가하도록 합시다. 이를 통해 설정에 필요한 어노테이션을 사용할 수 있게 됩니다. org.aspectj aspectjweaver 1.8.13 문제점1) 기존 코드의 수정 다음 두 함수의 실행시간을 비교를 해야한다고 가정하겠습니다. 하나는 계승을 반복문을 통해 구하는 함수이고 다른 하나는 재귀를 통해 구하는 것입니다. package chap07; public class ImpeCalculator ..
빈의 라이프 사이클 스프링 컨테이너는 객체를 생성하고 주입한 다음 초기화하고 소멸하는 것을 관리합니다. 스프링 컨테이너를 초기화 하는 과정에서는 객체를 생성하고 의존 관계를 설정합니다. 이 과정에서 자동 주입을 설정했던 것 또한 완료가 됩니다. 이후 구현한 초기화 메서드가 있다면 빈 객체의 초기화를 진행합니다. 컨테이너를 소멸하게 되면 빈 객체에 소멸 메서드가 구현이 되었다면 소멸 메서드를 실행한 후 컨테이너가 소멸됩니다. 초기화&소멸 인터페이스 이 두 과정이 필요하다면 아래의 인터페이스를 구현하면 됩니다. public interface InitializaingBean{ void afterPropertiesSet() throws Exception; } public interface DisposableBe..
컴포넌트 스캔 자동 주입과 함께 사용하는 추가 기능은 컴포넌트 스캔입니다. 컴포넌트 스캔을 사용하면 설정 클래스에서 @Bean을 사용하지 않더라도 원하는 클래스를 빈 객체로 만들수 있습니다. 설정 클래스에 다음과 같이 있다고 해봅시다. package config; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import spring..
@Autowired at field 이전 글에서 Autowired를 사용해 빈을 DI할 수 있다고 설명했습니다. 또한 사용하면 설정 클래스에서 생성자나 세터 메서드를 통해 DI를 하는 코드를 없앨 수 있습니다. @Autowired는 필드나 세터 메서드에 위치할 수 있는데 아래 코드는 필드에 적용한 예시입니다. public class MemberRegisterService { @Autowired private MemberDao memberDao; ... 위와 같이 했다면 설정 클래스에서 DI를 하는 코드를 제거할 수 있습니다. @Bean public MemberRegisterService memberRegSvc() { return new MemberRegisterService(); //return new ..
- Total
- Today
- Yesterday
- sweeping
- dijkstra
- 2-SAT
- SCC
- spring boot
- 좌표압축
- 동적계획법
- Oracle
- 이분매칭
- greedy
- dfs
- hld
- implementation
- Suffix Array
- 이분탐색
- spring
- sorting
- union find
- 정렬
- bfs
- knapsack
- kmp
- DP
- 스위핑
- Fenwick
- Segment tree
- 펜윅트리
- 세그먼트트리
- string
- 트라이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |