본문 바로가기

다이나믹 프로그래밍2

[백준] 2193 - 이친수, C++ https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되 www.acmicpc.net 본 문제는 0과 1로만 이루어진 수 중, 0으로 시작하지 않고, 1이 두 번 연속으로 나타나지 않는 수를 구하는 문제다. 큰 문제를 작은 .. 2020. 1. 11.
[백준] 10844 - 쉬운 계단 수, C++ https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 본 문제는 인접한 모든 자릿수의 차이가 1이 나는 수를 계단 수의 경우의 수를 구하는 문제다. 큰 문제를 작은 문제에서 구할 수 있기 때문에 DP로 풀 수 있다. i자리 수 중 j로 끝나는 경우의 수는 i-1자리 수 중 j+1, j-1의 경우의 수를 더한 값이다. 그러나 끝자리가 0인 경우는 1, 9인 경우는 8 밖에 없다. 따라서, 점화식을 d[i][j] = d[i-1][j+1] + d[i-1][j-1]로 정의하고, d[i][0] = d[i-1][1], d[i][9] = d[i-1][8]로 예외 처리를 하면 .. 2020. 1. 11.