일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 페이징
- Kafka
- 자료구조
- 운영체제
- 클라우드
- JPA
- Jenkins
- 코딩
- MST
- Spring
- PL/SQL
- 오라클
- DP
- db
- aws
- Spring Cloud
- 백준
- 알고리즘
- golang
- 자바
- 쿼리
- 디자인 패턴
- MVC
- retry
- SQL
- feign
- 데이터베이스
- Spring Cloud Feign
- Spring Boot
- Intellj
- Today
- Total
목록알고리즘 (33)
justgo_developer
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263import java.util.*; public class Main { static int N; static int M; static int[] arr; static int[] temp; static boolean[] visit; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); M = sc.nextInt(); arr = new int[9]; temp = new int[N]; v..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354import java.util.*; public class Main { static int N; static int M; static int[] arr; static int[] temp; static boolean[] visit; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); M = sc.nextInt(); arr = new int[9]; temp = new int[N]; visit = new boolean..
knapsack problem- n개의 아이템과 배낭- 각각의 아이템은 무게 Wi와 Vi를 가짐- 배낭의 용량 W- 목적 : 배낭의 용량을 초과하지 않으면서 가격이 최대가 되는 부분집합예Greedy - 가격이 높은 것부터 선택- 무게가 가벼운 것부터 선택- 단위 무게당 가격이 높은것부터 선택->불가능 순환식bottom-up
LCS(Longest Common Subsequence) 순환식 항상 순환식은 base케이스로 수렴하는지 확인해야한다. 동적계획법
동적계획법1. 일반적으로 최적화문제(최소값,최대값) 혹은 카운팅 문제에 적용됨2. 주어진 문제에 대한 순환식을 정의한다.3. 순환힉을 memoization 혹은 bottom-up 방식으로 푼다. - subproblem들을 풀어서 원래 문제를 푸는 방식, 그런 의미에서 분할정복법과 공통성이 있음- 분할정복법에서는 분할된 문제들이 서로 disjoint하지만 동적계획법에서는 그렇지 않음- 즉 서로 overlapping하는 subproblem들을 해결함으로써 원래 문제를 해결 분할정복법동적계획법 Optimal Substructure- 어떤 문제의 최적해가 그것의 subproblem들의 최적해로부터 효율적으로 구해질 수 있을 때 그 문제는 optimal substructure를 가진다고 말한다.- 분할정복법/탐욕..
행렬 경로 문제 - 정수들이 저장된 n x n 행렬의 좌상단에서 우하단까지 이동한다.단 오른쪽이나 아래쪽 방향으로만 이동할 수 있다.- 방문한 칸에 있는 정수들의 합이 최소화되도록 하라. Recursive algo. int mat(int i, int j){if (i==1 && j==1)return m[i][j];else if(i==1)return mat(1,j-1) + m[i][j];else if(j==1)return mat(i-1,1) + m[i][j];elsereturn Math.min(mat(i-1,j) , mat(i,j-1) ) + m[i][j]; } => 비효율적 Memoization:계산된 결과값을 캐시에 저장int mat(int i, int j){if(L[i][j] != -1)return L..
동적계획법(DP) Fibonacci Numbers->recursion으로 하니 많은 계산이 중복됨Memoization: 중간 계산 결과를 cahing함으로써 중복 계산을 피함bottom-up 방식배열을 이용해 순환식을 bottom-up방식으로 계산하는 것은 동적계획법이라ㅗㄱ 한다. 이항계수(Binomial Coefficient)->많은 계산이 중복됨 Memoization Dynamic Programming Memoization vs Dynamic Programming- 순환식의 값을 계산하는 기법들이다.- 둘 다 동적계획법의 일종으로 보기도 한다.- Memoization 은 top-down방식이며, 실제로 필요한 subproblem만을 푼다.- 동적계획법은 bottom-up 방식이며, recursion에..
import java.util.*; public class Main {static int N;static int[][] map = new int[25][25];static boolean[][] visit = new boolean[25][25];static int[] dx = {0,1,0,-1};static int[] dy = {1,0,-1,0};static int cnt = 1; public static void main(String[] args) {Scanner sc = new Scanner(System.in);N = sc.nextInt();for(int i=0;i
import java.util.*; public class Main {static int N;static int[][] map = new int[25][25];static boolean[][] visit = new boolean[25][25];static int[] dx = {0,1,0,-1};static int[] dy = {1,0,-1,0};static int cnt = 1;static int len = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in);N = sc.nextInt();for(int i=0;i