백준 알고리즘 기초 - 브루트 포스 (재귀, 백트래킹)
재귀에는 어느정도 익숙해진듯 하다. 재귀를 풀었을 때 특유의 쾌감도 있는듯.. 하지만 갈 길은 아직 멀다.... 정리 시작! - 이전에 풀었던 문제를 재귀를 사용해서 풀어보자. * 1, 2, 3 더하기 (low) : 정수 n을 1,2,3의 합으로 나타내는 방법의 수 구하기 9095번: 1, 2, 3 더하기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 www.acmicpc.net #include using namespace std; int ans = 0; void go(int left, int n)..
백준 알고리즘 기초 - 다이나믹 프로그래밍 (연습)
dp가 정말 풀 것 같으면서도 잘 안 풀린다. 계속 고민하다가.. 해답 보고 실소 짓고 풀고.. 또 고민하다가.. 해답 보고 실소 짓고 풀고.. 반복.. 감각을 키우는 것 외에는 답이 없는 것 같다. 그래도 어느정도는 감을 잡은듯 싶다. 하지만 또 뒤돌면 못 풀 것 같은 녀석이다. 푼 것들 정리 해보자 - * 1, 2, 3 더하기 3 (low): 하던 것처럼 맨 끝을 나눠서 생각해보자 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 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 2..
백준 알고리즘 기초 - 다이나믹 프로그래밍 (예제2)
어렵다.. dp.. 근데 중요한 건.. 더 어려운 놈들이.. 기다리고 있다는 것... 생각보다 시간이 더 걸릴 것 같다.. 그만큼 확실하게 짚고 넘어가자..! 예제2 정리 시작! - * 가장 긴 증가하는 부분 수열(mid): LIS라고도 불리는 유명한 문제다. 기억해뒀다가 필요할 때 써먹자. 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21..