전체 글 146

[BOJ] 10819번: 차이를 최대로 / JAVA / Backtracking, BruteForce

https://www.acmicpc.net/problem/10819 10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net * 풀이 방법 1. 모든 배열을 구해본 후 2. 배열의 차이, abs의 합계의 최대값을 비교한다. * 나는 왜 백트래킹으로 접근했는가? - 우선 모든 배열의 순열을 구한 후에, 아닌 경우 다시 뒤돌아가서(BACK) 구해야 했기 때문에, 백트래킹으로 풀어야 한다고 판단. ===========================내가 나중에 다시 확인하려고 적어두는 내용들====================..

Algorithm Study 2022.03.26

컴포넌트 탐색위치와 스캔 대상

모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸린다. 그래서 꼭 필요한 위치부터 탐색하도록 시작위치를 지정할 수 있다. basePackages: 탐색할 패키지의 시작 위치를 정한다. 이 패키지를 포함해서 하위 패키지를 모두 탐색한다. ex. basePackages = "hello.core" basePackagesClasses : 지정한 클래스의 패키지를 시작 위치로 지정한다. 디폴트는 @ComponentScan 이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다. * 권장 하는 방법 - 설정 정보의 클래스 위치를 프로젝트 최상단에 두고, 패키치 위치를 지정하지 않는 것을 추천한다. ex. 아래와 같은 프로젝트 구조인 경우, com.hello com.hello.service com.hello...

@ComponentScan @Component @Autowired

스프링 빈으로 등록할 때마다, @Bean 을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 등록할 스프링 빈이 많으면 일일이 등록하기도 힘들고 누락되는 경우도 생긴다. -> 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 컴포넌트 스캔을 사용하기 위해서는 @ComponentScan 을 설정 정보에 붙여주면 된다. 기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없다! - 컴포넌트 스캔을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록되기 때문에, ( @Configuration 이 컴포넌트 스캔의 대상이 된 이유도 @Configuration 소스코드를 열어보면 @Component 애노테이션이 붙어있기 ..

@Configuration 과 싱글톤

AppConfig 를 보면 1. MemberSerivce 호출 2. MemberRepository 호출 3. MemoryMemberRepository 호출 4. OrderService 호출 5. MemberRepository 호출 discountPolicy 호출 6. MemoryMemberRepositoy 호출 7. FixDiscountPolicy 호출 -> 결과적으로 MemoryMemberRepository 가 2번 호출되는 것 처럼 보인다. -> 하지만, 출력해보면 1번만 호출되는 것을 확인해 볼 수 있을 것이다. -> @Configuration 스프링 컨테이너는 싱글톤 레지스트리다. 따라서 스프링 빈이 싱글톤이 되도록 보장해주어야 한다. 그런데 스프링이 자바 코드까지 어떻게 하기는 어렵다. 저 자바..

싱글톤 패턴? 싱글톤 컨테이너 / 스프링 컨테이너

웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 클라이언트들이 서비스를 요청할때마다 객체를 생성해 주는 것을 비효율적이다. 우리가 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다. - 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다! -> 메모리 낭비가 심하다 - 해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. -> 싱글톤 패턴 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을..

BeanFactory 와 ApplicationContext

1. BeanFactory 스프링 컨테이너의 최상위 인터페이스다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 을 제공한다. 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. 2. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 그러면 둘의 차이가 뭘까? 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다. ApplicationContext는 BeanFactory의 기능을 상속받는다. ApplicationContext는 빈 관리기능 + 편리한 부가 기능을 제공한다. BeanFactory를 직접 사용..

스프링 빈 조회 - 상속관계

부모 타입으로 조회하면, 자식 타입도 함께 조회한다. 그래서 모든 자바 객체의 최고 부모인 Object 타입으로 조회하면, 모든 스프링 빈을 조회한다. 1. 부모 타입으로 조회시, 자식이 둘 이상 있으면 중복 오류가 발생한다. - ac.getBean(DiscountPolicy.class) 로 조회하면 중복오류 발생 -> 빈 이름으로 조회하거나, ac.getBean("rateDiscountPolicy", DiscountPolicy.class) -> 특정 하위 타입으로 조회한다. ( 추천하는 방법은 아님 ) 2. 부모 타입으로 모두 조회해보기.

[BOJ] 음식물 피하기 / JAVA / DFS

실버1 https://www.acmicpc.net/problem/1743 1743번: 음식물 피하기 첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다 www.acmicpc.net 음식물이 있는 칸에 인접된 정점을 모두 탐색해야 한다. -> 모든 정점을 탐색하여 최적의 거리를 구한다 -> DFS 또는 BFS 사용 1. 음식점이 있는 좌표를 arr[x][y]= 1 로 저장 2. arr[x][y]=1 이면서 아직 방문하지 않은 좌표는 DFS 알고리즘을 통해 인접한 정점의 갯수를 구한다. 3. 정점의 갯수를 반환하여 결과값과 비교 ..

Algorithm Study 2022.03.23

[BOJ] 외판원순회2 / Java / 백트래킹

https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 풀이방법 백트래킹 사용 ( 정점을 지나는 경우의 수를 찾고, 아닌 경우 다시 돌아간다.) 1. 모든 정점을 다 지나야 하는 모든 경우의 수를 구하기. 이 때, W[i][j] = 0 인 경우 이동할 수 없음. 2. 모든 정점을 다 지난 후, 최솟값을 구하고 비교하기. 모든 정점을 다 지난 후 제일 첫번째로 돌아와야함 ( 마찬가지로, W[i][j]= 0인 ..

Algorithm Study 2022.03.22