Rst

Spring Security의 전체적 구조와 작동방식

이 글은 스프링 공식 문서를 보고 작성했습니다. 목차 1. 전체 구조 2. 필터와 필터체인 3. DelegatingFilterProxy 4. FilterChainProxy 5. SecurityFilterChain 6. 보안예외처리 과정 1. 전체 구조 스프링 시큐리티는 클라이언트의 모든 http요청에 대한 필터링을 통해 보안기능을 제공한다. 이 글에서는 스프링 시큐리티의 필터링이 어떻게 구성되어있는지 알아보려한다. 위 그림의 한 부분씩 살펴보자. 2. 필터와 필터체인 서블릿 애플리케이션은 톰캣과 같은 서블릿 컨테이너 위에서 실행된다. client의 요청이 발생했을때 컨테이너의 작동방식은 다음과 같다.... Read more

[백준 20180번 Two Buildings] JAVA 풀이

문제 링크 N개의 건물의 위치가 1부터 N이고 i번째 건물의 높이를 H(i)라 한다. i < j일때, (H(i) + H(j)) * (j - i)의 최대값을 구해야한다. 모든 경우의 i, j를 구하면 O(N*N)이므로 시간초과이다. 따라서 i와 j의 범위를 제한할 방법을 생각해야한다. 1. 두 건물의 거리와 높이 N개의 건물중에서 두 건물의 높이합*거리가 최대인 i번째 건물과 j번째 건물을 찾았다고 할 때(i < j), i~j범위 밖의 건물은 건물i, j보다 작아야한다. 왜냐하면 최적의 i와 j를 찾았는데 그 밖의 범위에 더 크거나 같은 크기의 건물이 있다면 i~j 거리보다 더 큰 거리의 조합인 두 건물... Read more

[백준 13262번 수열의 OR 점수] JAVA풀이 분할정복 최적화

문제링크 n길이의 수열을 k개의 그룹으로 나누고 각 그룹의 원소들을 or한 값을 모두 더한 값의 최대를 구하는문제. 어떻게 그룹을 나누어야하는지 계산해야한다. 이 상황을 dp로 표현할 수 있으며 아래처럼 opt를 구하는 문제로 변형시킬 수 있다. dp[k][n] --> n번째 원소까지 k개의 그룹으로 묶었을때 수열의 or점수의 최댓값. cost[i][j] --> i번째 부터 j번째까지 or한 값(하나의 그룹으로 묶었을때 그룹의 or) dp[k][n] = dp[k-1][opt] + cost[opt+1][n] --> (opt까지의 원소를 k-1로 묶은 최대 점수) + (opt+1부터 n까지 원소의 ... Read more

[백준 13261번 탈옥] JAVA풀이 - 분할정복을 이용한 동적계획법 최적화

문제 링크 총 L명의 죄수를 G명의 간수가 관리하는 상황에서 위험도의 최솟값을 구하는 문제이다. 이를 dp로 표현하면 dp[g][l] : g명의 간수가 l번째 까지의 죄수를 관리할 때 최소 위험도 cost(i, j) : i번째부터 j번째 까지의 죄수를 한명의 간수가 관리할때 위험도 dp[g][l] = dp[g-1][k] + cost(k+1, l) --> 위를 만족시키는 k를 구하는 문제로 변경시킬 수 있다. l이 증가함에 따라 k는 같거나 증가한다. 왜냐하면 마지막 cost에 해당하는 죄수들의 명수가 늘어나기 때문에 k가 줄어들면 위험도가 올라간다. 따라서 분할정복을 이용한 동적계획법 최적화를 적용할 수... Read more

[백준 1916번 최소비용 구하기] JAVA 풀이 (다익스트라)

문제링크 이 문제에서는 N개의 정점과 M개의 음이아닌 가중치를 가지는 간선을 준다. 이때 특정 정점사이로 이동하는 최소 가중치의 합을 구해야한다. 소스코드 import java.io.*; import java.util.*; public class 최소비용_구하기{ //https://www.acmicpc.net/problem/1916 public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ... Read more