코딩테스트/코테 지식 정리 2

[DP] 동적 프로그래밍 기본 개념 및 패턴 모음

개념 정리 🟡 거의 모든 DP를 관통하는 개념 3가지 DP 배열이 무엇을 의미할지 정하기 점화식 세우기 시작값 넣기 🟡 반복문 DP를 재귀로 바꾸는 발상 나는 거의 반복문으로 DP를 풀고 있다. 좀 더 쉽게 느껴지기 때문이다. 그런데 재귀가 더 직관적이고 편한 문제들이 분명 존재한다. 반복문을 재귀로 바꾸는 것은 어려운게 아니다. 반복문 DP에서의 시작값은 재귀문에서 if문을 대치하면 된다. (즉, 가장 Deep하게 내려간 마지막 재귀를 찍고 다시 돌아오는 느낌) 쉬운 예시로 피보나치 수열이 있다. // n번째 피보나치 수열을 구하는 문제 // 반복문 public static int calcLoopFibonacci(int n) { int answer = 0; // [CASE1] 값이 1인 경우 해당 값을..

[JAVA] 유클리드 호제법 (최대공약수, 최소공배수 구현)

https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95 유클리드 호제법 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 ko.wikipedia.org // 최소공배수 public static int LCM(int a, int b) { return (a * b) / GCD(a, b); } // 최대공약수 private static int GCD(int a, int b) { if(b == 0) { re..