ALGORITHM 54

알고리즘 문제 해결 개관

문제를 푸는 기술을 익혀야한다.1. 자신이 문제를 어떤 방식으로 해결하는지를 의식한다.2. 어느 부분이 부족한지,3, 어떤 부분을 개선해야 할지 파악한다. 문제를 풀기까지의 과정을 여러 부분으로 나눠보고 자신이 각 과정을 잘하고 있는지 못하고있는지 어떤 방향으로 개선할지 끊임없이 생각해야한다. [어떻게 문제를 풀 것인가]1. 문제를 이해한다.2. 어떻게 풀지 계획을 세운다3. 계획을 수행해서 문제를 해결한다.4. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다. 4. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다. '개선할 방법' 1. 문제를 읽고 이해하기 2. 재정의와 추상화 (자신의 방법으로 문제를 이해한다.)3. 계획 세우기 (어떤 알고리즘, 자료구조를 사용할지)4. 계획 검증하..

ALGORITHM 2017.05.22

경우의 수와 확률,타일링 방법의 수 세기

동적계획법 -> 최적화 But, 경우의 수 문제에도 사용 경우의 수 문제는 값이 지수적으로 증가하기 때문에 오버플로에 유의해야 한다. 예제 : 타일링 방법의 수 세기- 2xn 크기의 사각형을 2x1 크기의 타일로 채우는 방법의 수를 계산하는 문제 1. 완전탐색 2. 메모이제이션 을 이루는 2가지 방법 #include "stdafx.h"#include using namespace std; int mod = 1000000007;int cache[101]; int tiling(int width) {if (width > testcase; for (int i = 0; i width;cout

ALGORITHM 2017.05.22

11054_가장 긴 바이토닉 부분 수열

11054번 긴 바이토닉 수열 - 처음 보고 LIS와 LIS를 합한 문제라고 생각했다. 그래서 먼저 짠 LIS에다가 for문을 하나 더 넣어서 알고리즘을 맞췄는데 왠일인지 값이 나오지 않았다. 그래서 위와 같이 값이 들어가는 곳에 cout을 통해 console을 보니 내가 dp[i] += max를 for(j)안에 넣어서 이게 계속 반복된는 것 이었다. 첫번째 LIS의 경우 문제되지 않으나 두번째는 누적해서 더해주므로 문제가 되었다. 그래서 for(j)밖으로 위의 명령문을 빼주니 문제는 해결되었다. 그러나... 더 큰문제가 기다리고 있엇는데... 작은수를 찾는것이므로 처음은 앞에서부터 탐색했는데뒤는 뒤에서부터 탐색하다간 아 그럼 작은걸 하면되겠구나.... 이생각을 지금하네아무튼 나는 앞의 과정을 따라하기 ..

ALGORITHM 2017.01.31