알고리즘

· 알고리즘
LIS LIS는 Longest Increasing Subsequence의 약자로, 주어진 배열의 부분 수열 중 각 원소가 이전 원소보다 커야 한다는 조건을 만족하는 가장 긴 부분 수열이다. 예시를 들자면 다음과 같다. [10 20 10 30 20 50] 위와 같은 배열에서 LIS는 10 20 10 30 20 50 으로, 길이는 4이다. 다이나믹 프로그래밍 DP LIS를 찾는 가장 간단한 방법은 DP를 이용하는 것이다. 주어진 수열을 저장할 배열 뿐 아니라, 각 원소가 포함된 가장 긴 부분 수열을 저장할 또다른 배열이 필요하다. 여기서는 주어진 수열을 저장하는 num, 가장 긴 부분 수열의 길이를 저장할 배열을 len이라고 하겠다. for (int i = 1; i < N; i++) { for (int j ..
· 알고리즘
유클리드 호제법 a, b의 최대공약수와 b, a%b의 최대공약수가 같다는 것을 사용하여 최대 공약수를 찾는다. public static int gcd(int a, int b){ if(a%b==0) return b; return gcd(b, a%b); } a%b가 0이 되는 경우, a가 b로 나누어떨어지는 것이므로, b가 최대공약수가 된다. 관련 문제로 백준의 가 있다. 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 증명 유클리드 호제법은 귀류법으로 증명할 수 있다. f(a, b)는 최대공약수를 찾는 함수이다. 1. a>=b일 때, a = bx + r 가 성립한다. 2. f(..
ahue
'알고리즘' 카테고리의 글 목록