https://www.acmicpc.net/problem/14247산에는 n개의 나무가 있고, 각각 나무의 현재 길이는 H_i이며 나무가 자라는 속도는 A_i이다. 영선이가 하루에 한 나무씩 n일 산에 오르며 나무를 자를 때, 영선이가 얻을 수 있는 나무의 양의 최댓값을 구하는 문제다. 문제 탐색하기- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정ex. 가능한 시간 복잡도, 알고리즘 선택입출력 제한1 ≤ n ≤ 100,0001 ≤ H_i ≤ 100,0001 ≤ A_i ≤ 10,000 나무마다 {H_i, A_i}를 쌍으로 저장하고, 하루에 한 나무씩 ..
전체 글
https://www.acmicpc.net/problem/19941길이가 N인 식탁에 햄버거와 사람이 간격에 맞춰 존재한다. 사람들은 자신의 위치에서 거리가 K 이하인 햄버거를 먹을 수 있다. 이때 햄버거를 먹을 수 있는 사람의 최대 수를 구하는 문제다. 문제 탐색하기- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정ex. 가능한 시간 복잡도, 알고리즘 선택입출력 제한1 ≤ N ≤ 20,0001 ≤ K ≤ 10 문자열을 반복문을 통해 접근하도록 코드를 짜야 한다. 햄버거를 선택할 수 있는 거리가 K로 일정하기 때문에 각 사람마다 자신의 위치에서 K를 ..
https://www.acmicpc.net/problem/13397N개의 수로 이뤄진 1차원 배열이 있고, 이 배열을 M개 이하의 구간으로 나눠 구간의 점수의 최댓값을 최소로 하려고 한다. 구간은 다음과 같은 조건을 만족해야 한다.하나의 구간은 하나 이상의 연속된 수들로 이루어짐배열의 각 수는 모두 하나의 구간에 포함돼야 함구간의 점수 = 구간에 속한 수의 최댓값 - 최솟값배열과 M이 주어질 때, (구간의 점수의 최댓값)의 최솟값을 구하는 문제다. 문제 탐색하기- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정ex. 가능한 시간 복잡도, 알고리즘 선택..
https://www.acmicpc.net/problem/1577아래 그림처럼 가로 크기가 N이고 세로 크기가 M인 도시가 있다. 도시에는 중간중간 공사 중인 도로가 있고, 이 도로는 지나갈 수 없다. 세준이는 (0, 0)에 있는 집에서 (N, M)에 있는 학교까지 최단 거리(N + M)로 이동하려고 할 때, 서로 다른 경로의 경우의 수를 구하는 문제다. 문제 탐색하기- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정ex. 가능한 시간 복잡도, 알고리즘 선택입출력 제한1 ≤ N, M ≤ 1000 ≤ K ≤ 500 ≤ a, c ≤ N0 ≤ b, d ≤ ..
스프링을 통해 객체의 초기화 작업과 종료 작업을 어떻게 진행하는지 알아보는 섹션! 1. 빈 생명주기 콜백스프링 빈의 라이프사이클a. 객체 생성 → 의존관계 주입스프링 빈은 객체를 생성하고 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 준비가 됨Q. 객체 초기화 작업은 의존관계 주입이 모두 끝난 다음에 호출해야 하는데, 개발자가 의존관계 주입이 모두 끝난 시점을 확인할 수 있을까?A. 스프링은 의존관계 주입이 모두 끝나면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공하고, 스프링 컨테이너가 종료되기 직전 소멸 콜백을 통해 안전하게 종료 작업을 진행할 수 있도록 함 b. 스프링 빈의 이벤트 라이프사이클스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기..
https://www.acmicpc.net/problem/2156테이블 위에 n개의 포도주 잔이 일렬로 놓여 있고, 포도주를 시식하는 데엔 두 가지 규칙이 있다.포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에 원래 위치에 놓아야 한다.연속으로 놓여 있는 3잔을 모두 마실 수 없다.각 포도주의 양이 주어졌을 때, 최대로 마실 수 있는 포도주의 양을 구하는 문제다. 문제 탐색하기- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정ex. 가능한 시간 복잡도, 알고리즘 선택입출력 제한1 ≤ n ≤ 10,0000 ≤ 포도주의 양 ≤..
https://www.acmicpc.net/problem/11722수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 문제다. 문제 탐색하기- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정ex. 가능한 시간 복잡도, 알고리즘 선택입출력 제한1 ≤ N ≤ 1,0001 ≤ A_i ≤ 1,000 수열 A를 저장할 배열을 선언하고, 배열의 i번째 인덱스까지의 가장 긴 감소하는 부분 수열의 길이를 저장하기 위한 dp 배열을 선언한다. 각 인덱스마다 현재 배열 값 하나를 부분 수열로 볼 수 있기 때문에 dp 배열을 모두 1로 초기화해둬야 한다. 배열..
1. 의존관계 주입 방법생성자 주입생성자를 통해 의존관계를 주입 받는 방법@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // 생성자가 1개이므로 생략해도 자동 주입 가능 public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; ..