백준 9095번 " 1, 2 ,3" 더하기 [Dynamic Programming]

2026. 1. 28. 14:06·Coding Test/Dynamic Programming

문제

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

문제 접근 순서.

 

1. 3가지의 숫자의 조합으로 합을 만들어 특정한 숫자와 같게 만드는 문제이므로 

    일단 DFS 재귀함수 방식과 DP 점화식 방법을 생각함. 

 

2. DFS 방식으로 문제를 접근할 시 시간복잡도가 O(3^n)으로 목표로 하는 숫자가 크면 클수록 시간복잡도가 커 시간 제한에 

    걸릴 확률이 높아진다. 따라서 DP 방법으로 문제 풀이를 한다. 

 

3.

점화식

출처: https://blog.naver.com/PostView.nhn?blogId=vjhh0712v&logNo=221470862600

 

다음과 같은 규칙을 점화식으로 세운다면 dp[i] = dp[i-3] + dp[i-2] + dp[i-1] 으로 규칙성을 세울 수 있다.

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

DFS 방식 문제풀이

#include <iostream>
#include <vector>

using namespace std;

void DFS(int& _iCount, int _iCurSum, int _iTargetNumber)
{
	// 1
	if (_iCurSum + 1 == _iTargetNumber)
	{
		_iCount++;
		return;
	}

	else if (_iCurSum + 1 > _iTargetNumber)
	{
		return;
	}

	else 
		DFS(_iCount, _iCurSum + 1, _iTargetNumber);
		



	// 2
	if (_iCurSum + 2 == _iTargetNumber)
	{
		_iCount++;
		return;
	}

	else if(_iCurSum + 2 > _iTargetNumber)
	{
		return;
	}

	else 
		DFS(_iCount, _iCurSum + 2, _iTargetNumber);




	// 3
	if (_iCurSum + 3 == _iTargetNumber)
	{
		_iCount++;
		return;
	}


	else if (_iCurSum + 3 > _iTargetNumber)
	{
		return;
	}

	else
	{
		DFS(_iCount, _iCurSum + 3, _iTargetNumber);
	}

}


int main()
{
	//1,2,3합으로 만들어라 

	int i_inputCount = 0;
	int i_TargetNumber = 0; 
	int i_Count =0; 
	cin >> i_inputCount; 

	vector<int> m_vecTarget; 


	for(int i=0; i< i_inputCount; i++)
	{
		cin >> i_TargetNumber; 
		m_vecTarget.push_back(i_TargetNumber);
	}

	

	// 여기서 이제 판별
	for(auto& iter : m_vecTarget)
	{
		DFS(i_Count, 0, iter);
		cout << i_Count << "\n";

		i_Count = 0; 
	}

	return 0; 
}

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

DP 방식 문제풀이

 

#include <iostream>
#include <vector>

using namespace std;



int main()
{
	int i_inputTestCase = 0;
	int dp[12] = { 0 }; 

	vector<int> m_vecAnswer; 

	dp[1] = 1; 
	dp[2] = 2;
	dp[3] = 4; 

	cin >> i_inputTestCase; ;

	for(int i=0; i<i_inputTestCase; i++)
	{
		int N; 
		cin >> N; 
		for(int i= 4; i<=N; i++)
		{
			dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1];
		}
		m_vecAnswer.push_back(dp[N]);
	}
	
	for(auto& iter : m_vecAnswer)
	{
		cout << iter << "\n";
	}


	return 0; 
}

'Coding Test > Dynamic Programming' 카테고리의 다른 글

프로그래머스 [Level3] 정수 삼각형 [Dynamic Programming]  (0) 2026.02.20
백준 1149번 "RGB" 거리 (Dynamic Programming)  (0) 2026.02.12
백준 11399번 "피보나치 함수" [Dynamic Programming 점화식]  (0) 2026.01.29
프로그래머스 [level3] N으로 표현 (Dynamic Programming)  (0) 2025.11.12
백준 1431번 "1로 만들기" [Dynamic Programming 알고리즘]  (1) 2025.11.11
'Coding Test/Dynamic Programming' 카테고리의 다른 글
  • 백준 1149번 "RGB" 거리 (Dynamic Programming)
  • 백준 11399번 "피보나치 함수" [Dynamic Programming 점화식]
  • 프로그래머스 [level3] N으로 표현 (Dynamic Programming)
  • 백준 1431번 "1로 만들기" [Dynamic Programming 알고리즘]
seonhwan2547
seonhwan2547
seonhwan2547 님의 블로그 입니다.
  • seonhwan2547
    seonhwan2547 님의 블로그
    seonhwan2547
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Unreal Project (17)
        • Khazan 모작 프로젝트 (2)
        • Unreal Study (10)
        • Blueprint (5)
      • Directx11 Project (11)
        • Thymesia 팀 프로젝트 (8)
        • Kaku Ancient Seal 개인 프로젝트 (2)
        • Thymesia Animation Tool 개발 (0)
      • Algorithm (6)
        • Binary_Search (2)
        • Greedy (1)
        • Dynamic Programming (1)
        • A-star (1)
      • Coding Test (31)
        • Brutal Force (2)
        • Sort (5)
        • DFS (3)
        • Binary_Search (4)
        • BFS (6)
        • Hash (2)
        • Dynamic Programming (6)
        • Greedy (1)
        • BackTracking (1)
        • Binary_Tree (1)
      • STL Container (1)
        • unorded_set (0)
        • priority_queue (1)
      • C++ 공부 및 몰랐던점 (8)
        • Smart pointer (1)
      • Visual Studio 설정관련 공부 (1)
      • Console Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 소개
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Game Programming
    Unreal Engine
    CodingTest
    blueprint
    hash
    Unreal
    GameProgramming
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
seonhwan2547
백준 9095번 " 1, 2 ,3" 더하기 [Dynamic Programming]