11057번: 오르막 수

문제접근🤔


  1. 첫번째 풀이

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/31a7ad33-d075-47ab-a0e9-34ccbe9e015b/Untitled.png

    → 이런식으로 코드가 진행이 되면 오버플로우가 난 녀석과 뺄셈이 일어날때 음수의 값이 나오는 등 이상한 결과를 초래하게 된다

    #include <iostream>
    #include <vector>
    
    int n;
    std::vector<std::vector<long long> > dp;
    
    void input_setting()
    {
    	std::ios_base::sync_with_stdio(false);
    	std::cin.tie(0);
    	std::cout.tie(0);
    }
    
    void input()
    {
    	std::cin >> n;
    	dp.resize(n + 1, std::vector<long long>(10, 1));
    }
    
    void solution()
    {
    	long long sum;
    
    	sum = 10;
    
    	for (int i = 2; i <= n; i++)
    	{
    		dp[i][0] = sum;
    		for (int j = 1; j <= 9; j++)
    		{
    			dp[i][j] = (dp[i][j - 1] - dp[i - 1][j - 1]) % 10007;
    			sum = (sum + dp[i][j]) % 10007;
    		}
    	}
    	std::cout << sum % 10007;
    }
    
    int main(void)
    {
    	input_setting();
    	input();
    	solution();
    	return (0);
    }
    

    →라고 생각했는데 분기를 통해서 해결할 수 있었음(THANKS TO CHAN...SUHSHIN...NAJLEE)

    if (dp[i][j - 1] < dp[i - 1][j - 1])
                dp[i][j] = dp[i][j - 1] + 10007 - dp[i - 1][j - 1];
            else
                dp[i][j] = (dp[i][j - 1] - dp[i - 1][j - 1]);
            sum += dp[i][j] % 10007;
            sum %= 10007;
    
  2. 두번째 풀이

놓쳤던 부분😅


코드😁


2160 KB

0 ms

#include <iostream>
#include <vector>

int n;
std::vector<std::vector<int> > dp;

void input_setting()
{
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
}

void input()
{
    std::cin >> n;
    dp.resize(n + 1, std::vector<int>(10, 1));
}

void solution()
{
    long long sum;
    sum = 10;
    
    for (int i = 2; i <= n; i++)
    {
        dp[i][0] = sum;
        for (int j = 1; j <= 9; j++)
        {
        if (dp[i][j - 1] < dp[i - 1][j - 1])
            dp[i][j] = dp[i][j - 1] + 10007 - dp[i - 1][j - 1];
        else
            dp[i][j] = (dp[i][j - 1] - dp[i - 1][j - 1]);
        sum += dp[i][j] % 10007;
        sum %= 10007;
        }
    }
    std::cout << sum;
}

int main(void)
{
    input_setting();
    input();
    solution();
    return (0);
}