Algorithm 170

[백준 알고리즘/BOJ/C++] 10844 쉬운 계단 수

45656과 같이 인접한 모든 자릿수의 차이가 1인 수를 계단 수라고 한다 길이가 N인 계단수가 몇 개나 있는지 구하는 문제 2차원 배열을 사용해야 한다. dp[i][j] 에서 j를 N자리 계단 수들의 각각 마지막 자릿수라고 생각해보자 0으로 끝나는 계단 수, 1로 끝나는 계단 수, 2로 끝나는 계단 수 등등 을 모두 합하면 N자리 계단 수의 합을 구할 수 있다 인접한 수는 차이가 1이어야 하니까 j=0, 즉 수가 0으로 끝난다면 그 앞은 무조건 1로 끝난다. j=9, 수가 9로 끝난다면 그 앞은 무조건 8이다 1로 끝나면 0 또는 2, 2로 끝나면 1 또는 3 ... 등등 길이가 N-1일 때 i-1, i+1로 끝나는 계단 수의 개수를 더해주면 길이가 N일 때 i로 끝나는 계단 수의 개수를 구할 수 있다..

Algorithm/BOJ 2021.02.01

[백준 알고리즘/BOJ/C++] 2579 계단 오르기

(1) 계단을 연속해서 세 번 올라갈 수 없다 (2) 마지막 계단은 꼭 밟아야한다 ​ ​ t가 마지막 계단이고, 무조건 밟아야 한다 연속해서 세 번은 밟을 수 없으므로 t-1 계단을 밟냐, 마냐에 따라 t-3 + t-1 + t, t-2 + t 두가지 경우로 나눌 수 있다 ​ 1 2 3 dp[1] = step[1]; dp[2] = step[1] + step[2]; dp[3] = max(step[1] + step[3], step[2] + step[3]); cs 최댓값을 구하기 위해 배열 dp를 하나 더 만든다 [1]에는 첫번째 계단 value [2]에는 첫번째 계단 + 두번째 계단 value [3]에는 첫번째 + 세번째 계단 value, 두번째 + 세번째 계단 value 중 더 큰 것을 넣는다 그럼 아래의 ..

Algorithm/BOJ 2021.01.31

[백준 알고리즘/BOJ/C++] 1932 정수 삼각형

RGB를 제대로 이해하고 풀었다면 쉽다!! 이 문제 역시 어떤 루트로 가야 최댓값이 나오는지는 모두 계산해봐야 알 수 있다 (두 번째 행의 3과 8 중에 8이 크다고 3을 배제해버리면 최댓값을 구할 수 없음) ​ 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include #include using namespace std; int n; int arr[501][501]; int dp[501][501]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (..

Algorithm/BOJ 2021.01.31

[백준 알고리즘/BOJ/C++] 1149 RGB거리

↑ 결국 똑같은 색의 집이 연속해서 나올 수 없다는 말을 복잡하게 설명... ​ 배열로 입력받을 것이니 행, 열로 보자 ​ (1) 같은 열의 수는 연속해서 더할 수 없다 (각 열이 빨강, 초록, 파랑을 의미하기 때문에 연속할 수 없다) (2) 어떤 루트로 가야 최솟값이 될지 모른다 (1행에서 최솟값을 골라도 최종적으로 제일 작다는 보장은 없다) (3) 다다음 행은 고려할 필요가 없다 (기준이 되는 행과 그 다음 행만 비교하면 됨) 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 28 29 #include #include using namespace std; int main() { ios_base::sync_with_stdio..

Algorithm/BOJ 2021.01.31

[백준 알고리즘/BOJ/C++] 9461 파도반 수열

파도반 수열이라고 인터넷에 치면 점화식이 많이 나오지만 직접 찾아보자 ​ 1 1 1 2 2 3 4 5 7 9 12 ··· 쉽게 점화식 P(n) = P(n-2) + P(n-3)을 정의할 수 있다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); long long arr[101] = { 0, 1, 1, 1, }; for (int i = 3; i > t; while (t--) { cin >> n; if(n

Algorithm/BOJ 2021.01.31