전체 글

Love what you do
·백엔드/Spring
안녕하세요. 이름을 바꿨습니다. 이제 미더덕이예요. 토이프로젝트에 적용해두었던 Lucy-XSS-Servlet-Filter가 Jakarta패키지를 지원하지 않음에 따라 XSS 방지 기능을 리팩토링하는 시간을 갖게 되었습니다. 이번 기간에 제가 부족한 부분을 많이 느껴 경험했던 이슈를 기초부터 자세히 정리하고 넘어가고자 합니다. 사실 이번 게시글은 XSS 방지에 대한 글이라기 보단 XSS 방지를 해결하기 위해 알아야할 선수 지식들에 대한 정리입니다. [이번 주제에서 다룰 내용들]1.  HTTP - Method & Content-Type2. Spring Web Annotations3. HttpServletRequestWrapper 4. HttpMessageConverter  이번 게시글에선 가장 기초가 되는 ..
public class Main { public static int INF = 1_000_000_000; public static void floydWarshall(int v, int e, int[][] data, int start) { int[][] dist = new int[v + 1][v + 1]; for (int i = 1; i 경유지 k에 대해서 k가 가장 안쪽 루프에 위치하면, i와 j에 대해 이미 선택된 경로가 경유지를 거치지 않고 직접 경로로 결정될 수 있음 */// for (int i = 1; i j (k를 거쳐서 가는 경우가 짧을 때 업데이트) for (int i = 1; i
public class Main { public static class Edge { int from; int to; int weight; public Edge(int from, int to, int weight) { this.from = from; this.to = to; this.weight = weight; } } public static void bellmanFord(int v, int e, int[][] data, int start) { Edge[] edges = new Edge[e]; for (int i = 0; i dist[edge..
public class Main { public static void dijkstra(int v, int[][] data, int start) { ArrayList> graph = new ArrayList(); for (int i = 0; i ()); } for (int i = 0; i pq = new PriorityQueue(Comparator.comparing(node -> node.weight)); pq.add(new Node(start, 0)); //시작 위치 큐에 가중치값 0으로 넣기 while (!pq.isEmpty()) { Node curNode = pq.poll(); /..
- 출발점에서 목표점까지의 최단 경로를 구하는 알고리즘- 한 노드에서 다른 모든 노드로의 최단 경로를 구할 수 있음- 간선에 음의 가중치가 없어야함- 그리디 + DP 형태- 알고리즘 복잡도 O(ElogV)public class Main { public static void dijkstra(int v, int[][] data, int start) { //그래프 만들기 ArrayList> graph = new ArrayList(); for (int i = 0; i ()); } for (int i = 0; i dp[j]) { minValue = dp[j]; curIdx = ..
// 숫자 7193 은 7193 도 소수이고,// 719, 71, 7 도 각각 소수이다.// n 이 주어졌을 때, n 자리 수 중에 위와 같은 소수를 찾는 프로그램을 작성하세요.// 입출력 예시// 입력 n: 3// 출력: 233, 239, 293, 311, 313, 317, 373, 379, 593, 599, 719, 733, 739, 797public class Main { public static ArrayList result; public static ArrayList solution(int n) { result = new ArrayList(); int[] primes = {2, 3, 5, 7}; // 1의 자리 소수 for (int i = 0; i
// 정수형 n과 m이 주어졌을 때,// 1 부터 n 까지의 정수 중에서 중복 없이 m 개를 고른 수열을 출력하는 프로그램을 작성하세요.// 입출력 예시// n: 3// m: 2// 출력: [1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]import java.util.Arrays;public class Main { public static boolean[] visited; public static int[] out; public static void solution(int n, int m) { visited = new boolean[n]; out = new int[m]; permutation(n, m, 0); }..
* 이차원 배열 대각선인지 판단abs(열 - 열) == abs(행 - 행) public class Main { static int n = 4; static int[] board = new int[n]; static int cnt; public static int nQueen(int row) { if (row == n) { cnt++; for (int i = 0; i 백트랙킹이라 안하는거 아닌지 -> 그게 아니라 한 row에 퀸이 어디어디 들어갈 수 있는지 각 상황을 보는 것.. for (int i = 0; i 기존에 퀸을 놓은 자리(i)와 현재 놓을 자리(row)를 비교하는 것 // 이곳이 가지치..
·백엔드/Spring
https://www.yes24.com/Product/Goods/126845564이번 시간에는 자바/스프링 개발자를 위한 실용주의 프로그래밍 4장 - SOLID를 읽고 정리해보겠습니다.   SOLID 원칙의 목적 - 응집도를 높이고 의존성을 낮춘다. 본론에 들어가기에 앞서, 가장 먼저 책에서 말하고자하는 SOLID의 원칙의 목적은 무엇일까? SOLID 원칙이 추구하는 것은 바로 "객체지향의 설계".그리고 설계 원칙을 통하여 소프트웨어의 응집도를 높이고 의존성을 낮추는 것을 목표로 함. SOILD 원칙을 무작정 암기하는 것보다 "응집도를 높이고 의존성을 낮추는 것에 집중"하는 것이 좋다.   유지보수성을 판단하는 세 가지 맥락 - 영향 범위, 의존성, 확장성설계 관점에서 코드의 유지보수성을 판단하는 세 ..
// 배낭에 물품을 담으려고 한다.// 배낭에는 k 무게 만큼의 물품을 담을 수 있다.// n 개의 물품이 주어지고 이 물품의 무게와 가치 정보가 items 2차원 배열에 주어졌을 때,// 최대 가치가 되도록 물품을 담았을 때의 가치를 출력하는 프로그램을 작성하세요.// 입출력 예시// items: {{6, 13}, {4, 8}, {3, 6}, {5, 12}}// n: 4// k: 7// 출력: 14public class Main { public static int solution(int[][] items, int n, int k) { Arrays.sort(items, (x, y) -> x[0] - y[0]); //무게가 작은 물품 먼저 int[][] dp = new int..
꾸준함의 미더덕
꾸준함의 미더덕