본문 바로가기

level44

타일채우기 - level 4 해결방법 dp를 이용하여 풀었다. $$ dp[N] = dp[N-1] + 2*dp[N-2] $$ N번째 경우의 수는 dp[N-1]번째에서 1 X 2 직사각형을 채울 경우와 dp[N-2]에서 2 X 1 직사각형과 2 X 2 직사각형을 채울 경우의 수를 합친것이다. 소스코드 #include using namespace std; int dp[1001]; int N, M; int main() { cin >> N >> M; dp[1] = 1; dp[2] = 3; for(int i = 3; i 2019. 5. 12.
서울에서 경산까지 - level 4 해결방법 2차원 dp로 해결하였다. i는 도시, j는 시간을 의미한다. int dp[101][100010]; 점화식은 아래와 같다. k는 이전도시까지의 시간이다. 이전도시 시간과 + 현재도시 시간(걷는 방법과 자전거 2가지 모두)에 이전 도시까지 + k번째 기부금(걷는 방법과 자전거 2가지 모두)값의 넣는다. $$ dp[i][k + 현재도시 시간] = max(dp[i][k + 현재도시 시간], dp[i-1][k] + k번째 기부금) $$ 하지만, K(전체시간)을 넘으면 안되므로 예외처리를 해줘야 한다. if(k + travel[i][0] 2019. 4. 14.
게임 맵 최단거리 - Level 4 해결방법 문제는 (0,0)부터 (n-1, m-1)까지 가는 거리 중 최소값을 구하는 것이다. 이런 문제는 항상 BFS가 답이다! DFS로 구현해도 되지만 DFS의 TimeComplexity가 너무 크기 때문에 시간초과가 된다. 다익스크라 알고리즘도 BFS를 쓰는 이유로 사용되고 있다! 삼성에서 이런 문제가 출제되기도 하는데 무조건 BFS다! 나는 struct로 (y,x)위치와 거리가 있는 구조체를 만들었다. struct node { int y, x, d; node(int yy, int xx, int dd) : y(yy), x(xx), d(dd) {} node() {} }; 그 다음 BFS로 구현하였고 먼저 (n - 1, m - 1)도착한 거리를 answer에 대입하고 break해주었다. BFS는 먼저 도.. 2019. 4. 6.
쿠키 구입 - level 4 해결방법 이 문제는 두 아들에게 똑같은 쿠키를 줄 경우 가장 큰 쿠키의 개수를 구하는 문제이다. 아들 1에게는 N - M번째까지의 쿠키를 주었다면, 아들2에게는 M+1 - K번째까지의 쿠키를 준 쿠키가 같아야 되고 가장 큰 수를 return해야 된다. 까지의 배열에는 쿠키의 수가 임의의로 존재한다. 만약 이 문제를 경우의 수마다 합을 한다면 Time Compexity는 우주까지 간다. 그래서 배열을 이용해 M번째 까지의 합을 미리 저장해 놓는 것이 좋다. 만약 I - J까지의 합을 구하고 싶다면 J번째 합에서 I - 1번째의 합을 빼주면 된다. int sum[N+1]; for (int i = 0; i < cookie.size(); ++i) sum[i+1] = sum[i] + cookie[i]; 먼저 아들.. 2019. 4. 5.