728x90
반응형

Tech 90

[스프링 핵심 원리] 스프링 컨테이너 기초

스프링 컨테이너 아래 코드를 살펴보자. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); // AnnotationConfigApplicationContext는 ApplicationContext 인터페이스의 구현체 위 코드에서 ApplicationContext 를 스프링 컨테이너라고 한다. (ApplicationContext는 인터페이스) 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 위 방식처럼 애노테이션 기반 자바 설정 클래스로 만들 수 있다. 기존의 Appconfig를 사용해서 직접 객체를 생성하고 DI → 스프링 컨테이너를 통해 사용 스프링 컨테이너는 @Configurat..

Tech/Spring 2022.01.05

[BOJ] 백준 11052 카드 구매하기 c++ (DP)

문제 출처 : https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 풀이 DP로 해결하는 문제이다. P1~PN은 card 배열에 넣어주고, dp[i]를 카드 i개를 갖기 위해 지불한 최댓값 이라고 하였다. 모든 경우의 수를 고려해야 할 것 같아서, 각 dp(1부터 N)마다 1부터 i장 이하의 카드팩을 구매하는 경우를 고려하였다. ex) 1장 카드팩을 구매할 경우 dp[N] = dp[N - 1] + card[1] 이다. 2장 카드팩을 구매할 경우 dp[N] ..

Tech/Algorithm 2022.01.04

[스프링 핵심 원리] IoC, DI, 컨테이너

제어의 역전 IoC(Inversion of Control) 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것 기존 프로그램에서는 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성/연결/실행했다. (이전 예시 코드를 통해 확인할 수 있다.) private final MemberRepository memberRepository = new MemoryMemberRepository(); 그러나 의존성 주입(DI)을 통해 AppConfig에서 프로그램을 제어하고, 구현 객체는 자신의 로직을 실행하는 역할만 담당하게 됐다. public class MemberServiceImpl implements MemberService { // private final MemberRepositor..

Tech/Spring 2022.01.04

[BOJ] 백준 15486 퇴사 2 c++ (DP)

문제 출처 : https://www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net 풀이 DP로 해결하는 문제이다. 뒤에서부터 탐색하는 방식으로 해결하였으며 앞에서부터 탐색하는 방법도 있다. dp[i]를 i일부터 시작했을때의 최댓값 이라고 하였다. dp는 동적할당을 해주고 문제의 Ti와 Pi는 vector에 넣어주었다. ※ 1차원 배열 동적할당에서, new int[N]뒤에 ()을 붙이면 0으로 초기화 해준다. int *dp = new ..

Tech/Algorithm 2022.01.02

[BOJ] 백준 9095 1, 2, 3 더하기 c++ (DP)

문제 출처 : https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 풀이 DP 기초 문제이다. 10 이하의 정수를 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 문제이다. dp[i]를 i 를 1, 2, 3 으로 나타내는 방법의 수라고 하자. dp[1]은 1로만 나타낼 수 있으므로 1, dp[2]는 2, 1+1 이므로 2, dp[3]은 3, 2+1, 1+2, 1+1+1 이므로 4이다. ※ 2, 3의 경우도 점화식으로 나타낼 수 있는데, dp[2] = dp[1] + 1(2로 나타낼 수 있으므로) dp[3] = dp[1] + dp[2] + 1(3으..

Tech/Algorithm 2022.01.01

[스프링 핵심 원리] DIP와 생성자 주입, 의존관계 주입(DI)

애플리케이션을 개발하던 중, DIP에 위반할 수 밖에 없는 상황이 왔다. DIP - 의존 관계를 맺을 때 변화하기 어려운 것, 거의 변화가 없는 것에 의존 - 구현 클래스에 의존하지 말고 인터페이스에 의존해야 한다. - 역할에 의존하게 해야 한다. (역할과 구현을 철저하게 분리하도록!!) 아래 코드를 보자. private final DiscountPolicy discountPolicy = new FixDiscountpolicy(); 결국 인터페이스를 참조하는게 아닌, 직접 객체를 생성을 하게 되는 것이다. 이를 해결하려면 어떻게 해야 할까? 강의에서는 애플리케이션을 하나의 공연으로 비유했다. 각각의 인터페이스는 배역이라고 생각할때, 해당 배역을 맡게 되는 배우를 선택하는 역할은 공연 기획자가 할 것이다...

Tech/Spring 2022.01.01

[BOJ] 백준 9084 동전 c++ (DP)

문제 출처 : https://www.acmicpc.net/problem/9084 9084번: 동전 우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는 www.acmicpc.net 풀이 DP로 해결하였던 문제이다. 동전의 종류가 주어지고 주어진 금액을 만드는 모든 경우의 수를 세는 문제이다. 점화식은 다음과 같다. for(int i = 0; i T; while (T--){ int dp[10000 + 1] = {0, }; int N; cin >> N; vector coin(N); in..

Tech/Algorithm 2021.12.28

[BOJ] 백준 12865 평범한 배낭 c++ (냅색 알고리즘, Knapsack, DP)

문제 출처 : https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 풀이 배낭 알고리즘이라고도 불리는 Knapsack 알고리즘의 대표 문제이다. 여러가지 케이스가 있을때 특정 조건을 만족하는 값, 조합 등을 구하는 문제들이며 대부분 DP로 해결할 수 있다. 이 문제 역시 DP로 해결 할 수 있는데 문제를 요약해보면, 각 물건의 무게(W)와 가치(V)가 주어지고, 배낭의 용량(K)이 주..

Tech/Algorithm 2021.12.27

[BOJ] 백준 1764 듣보잡 c++ (문자열, map, unordered_map)

문제 출처 : https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 풀이 브루스포스로 해결하면 시간 초과가 발생한다. map을 이용해서 듣도 못한 사람을 저장하고, 보도 못한 사람을 해당 map에서 찾아 있는 경우 vector에 추가 해주었다. sort 함수를 사용해 사전순으로 출력하였다. (sort를 사용하려면 algorithm 헤더 파일을 선언해주어야 한다!) 이분탐색(binary_search)을 활용해 겹치는 사람을 찾는 방법도 있다. 아래 ..

Tech/Algorithm 2021.12.22

[스프링 핵심 원리] 객체 지향 설계의 5가지 원칙(SOLID), 스프링

- SOLID 5원칙 1. SRP (Single responsibility principle) : 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. (클 수도 있고, 작을 수도 있다.) 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것이다. -> 특정 목적의 클래스는 그 목적 외에 다른 기능을 가지면 안된다는 뜻! 2. ★ OCP (Open/closed principle) : 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 다형성(오버라이딩, 오버로딩 등)을 활용해보자 다형성 (Polymorphism) : 하나의 객체가 여러 가..

Tech/Spring 2021.12.22
728x90
반응형