katte
개발새발 우주정복기
katte
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • 블로그 소개 (1)
    • Computer (36)
      • 자료구조 (0)
      • 알고리즘&백준 (19)
      • 컴퓨터구조 (0)
      • C++ (17)
      • Kotlin (0)
    • EE (29)
      • Verilog (22)
      • 디지털 시스템 (2)
      • 집적회로설계 (1)
      • 임베디드 시스템 (4)
    • 토이프로젝트 (3)
    • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 함수포인터
  • C++11
  • cin
  • c++ 입출력
  • EOF
  • ignore
  • for 루프
  • c++
  • 표준스트림
  • 배열포인터
  • 입력버퍼
  • cctype
  • C언어
  • ctime
  • C++ 스트림 개요
  • Get
  • 스트림
  • C++ 스트림 클래스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
katte

개발새발 우주정복기

Computer/알고리즘&백준

[백준][C++][DP] 10844 쉬운 계단 수

2022. 12. 20. 20:08

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

 

10844번: 쉬운 계단 수

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

www.acmicpc.net

 

 

DP, 동적 계획법은 1차원 방식으로 푸는 문제가 있고 2차원 혹은 그 이상의 차원의 배열을 사용하여 푸는 방식이 있다.

 

이 문제와 같이 마지막 수를 기록해야 하는 경우(연속, 증가 등)에 2차원 배열을 사용한다. 

 

이 문제의 경우 계단수의 몇번째 수인지를 나타내기 위해 n, 마지막 수가 무엇인지를 나타내기 위해 i를 사용하였다. 

 

마지막 수가 0와 9인 경우만 따로 처리를 해주고, 나머지는 점화식을 세워서 풀면 되는 문제

 

 

#include <iostream>

long long memo[101][10] = { 0, };

long long dp(int n, int i)
{
	if (n == 1) return memo[n][i];

	if (memo[n][i] != 0) return memo[n][i];

	if (i == 0) memo[n][i] = dp(n - 1, i + 1);
	else if (i == 9) memo[n][i] = dp(n - 1, i - 1);
	else
	{
		memo[n][i] = (dp(n - 1, i - 1) + dp(n - 1, i + 1)) % 1'000'000'000;
	}

	return memo[n][i] % 1'000'000'000;
}

int main()
{
	for (int i = 1; i < 10; ++i) memo[1][i] = 1;

	int n;
	std::cin >> n;
	long long result = 0;
	for (int i = 0; i < 10; ++i) result = (result + dp(n, i)) % 1'000'000'000;
	std::cout << result;
}
저작자표시 (새창열림)

'Computer > 알고리즘&백준' 카테고리의 다른 글

[백준][C++][DP] 2156 포도주 시식  (2) 2022.12.22
[백준][C++][DP] 11053, 14002 가장 긴 증가하는 부분 수열  (0) 2022.12.21
[알고리즘] 정렬 알고리즘 - 선택 정렬, 힙 정렬, 병합 정렬, 퀵 정렬  (0) 2022.12.13
[백준][C++] 1966 프린터 큐  (0) 2022.12.07
[백준][C++] 백준 시간 초과날 때  (0) 2022.12.02
    'Computer/알고리즘&백준' 카테고리의 다른 글
    • [백준][C++][DP] 2156 포도주 시식
    • [백준][C++][DP] 11053, 14002 가장 긴 증가하는 부분 수열
    • [알고리즘] 정렬 알고리즘 - 선택 정렬, 힙 정렬, 병합 정렬, 퀵 정렬
    • [백준][C++] 1966 프린터 큐
    katte
    katte
    개발새발 코딩하는 블로그 / HW 위주

    티스토리툴바