그럴듯한 개발 블로그
반응형

https://www.acmicpc.net/problem/10844

 

10844번: 쉬운 계단 수

첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

안 쉬운 계단 수..
앞자리가 아닌 뒷자리부터 생각해야 한다.

뒷자리가 0, 9일 경우엔 계단 수가 한 개만 가능하다.  (10, 98)

 

헷갈려서 가독성 좋게 변수에 담아 풀었었다.

#include <iostream> // 실패코드
#include <string>
#include <vector>
#include <algorithm>
#include <deque>
#include <unordered_set>
#include <cstring>

using namespace	std;
int dp[101][10];

int	main()
{
	ios::sync_with_stdio(0),cin.tie(0);
	int N;
	cin >> N;

	for (int i = 1; i < 10; i++)
		dp[1][i] = 1;

	for (int i = 2; i <= N; i++) {
		for (int j = 0; j < 10; j++) {
			int prev_up = dp[i - 1][j + 1]; // 9일때 일단 참조돼서 seg뜸
			int prev_down = dp[i - 1][j - 1];
			if (j == 0)
				dp[i][0] = prev_up;
			else if (j == 9)
				dp[i][9] = prev_down;
			else
				dp[i][j] = prev_up + prev_down;

			dp[i][j] %= 1000000000;
		}
	}
	int res = 0;
	for (int i = 0; i < 10; i++) {
		res += dp[N][i];
		res %= 1000000000;
	}
	cout << res;
}

허나 위 경우 변수에 일단 다 담기 때문에 0,9일 경우에도 잘못된 인덱스를 참조해서 segment fault가 떴다.

조심;;

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <deque>
#include <unordered_set>
#include <cstring>

using namespace	std;
int dp[101][10];

int	main()
{
	ios::sync_with_stdio(0),cin.tie(0);
	int N;
	cin >> N;

	for (int i = 1; i < 10; i++)
		dp[1][i] = 1;

	for (int i = 2; i <= N; i++) {
		for (int j = 0; j < 10; j++) {
			if (j == 0)
				dp[i][0] = dp[i - 1][j + 1];
			else if (j == 9)
				dp[i][9] = dp[i - 1][j - 1];
			else
				dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1];

			dp[i][j] %= 1000000000;
		}
	}
	int res = 0;
	for (int i = 0; i < 10; i++) {
		res += dp[N][i];
		res %= 1000000000;
	}
	cout << res;
}

 

반응형

'<algorithm> > 백준' 카테고리의 다른 글

백준 19583 싸이버개강총회 c++  (0) 2023.11.28
백준 9009 피보나치 c++  (0) 2023.11.22
백준 3184 양 c++  (0) 2023.11.05
백준 1806 부분합 c++  (0) 2023.11.04
백준 2230 수 고르기 c++  (0) 2023.11.04
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!