반응형
리뷰
입력되는 숫자의 범위가 10000이므로 10000까지의 값을 미리 구해놓은 뒤 O(1)의 속도로 쿼리를 처리하는 문제
https://www.acmicpc.net/problem/15989
문제 풀이
- 정수형 배열 dp를 10001 크기로 설정한 후, dp[1], dp[2], dp[3]은 1로 초기화를 해준다.
- n이 10인 경우까지 손코딩을 해보면 쉽게 점화식을 도출할 수 있다.
- 점화식 : dp[i] = dp[i - 3] + i / 2 + 1
- t값을 입력 받고 t번에 입력되는 테스트케이스를 dp의 인덱스로 출력해 주면 된다.
참고 사항
n = 1 ~ 10까지의 케이스
1
1 1
2
1 1 1
2 1
3
1 1 1 1
2 1 1
2 2
3 1
1 1 1 1 1
2 1 1 1
2 2 1
3 1 1
3 2
1 1 1 1 1 1
2 1 1 1 1
2 2 1 1
2 2 2
3 1 1 1
3 2 1
3 3
1 1 1 1 1 1 1
2 1 1 1 1 1
2 2 1 1 1
2 2 2 1
3 1 1 1 1
3 2 1 1
3 2 2
3 3 1
1 1 1 1 1 1 1 1
2 1 1 1 1 1 1
2 2 1 1 1 1
2 2 2 1 1
2 2 2 2
3 1 1 1 1 1
3 2 1 1 1
3 2 2 1
3 3 1 1
3 3 2
1 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1
2 2 1 1 1 1 1
2 2 2 1 1 1
2 2 2 2 1
3 1 1 1 1 1 1
3 2 1 1 1 1
3 2 2 1 1
3 2 2 2
3 3 1 1 1
3 3 2 1
3 3 3
1 1 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1
2 2 1 1 1 1 1 1
2 2 2 1 1 1 1
2 2 2 2 1 1
2 2 2 2 2
3 1 1 1 1 1 1 1
3 2 1 1 1 1 1
3 2 2 1 1 1
3 2 2 2 1
3 3 1 1 1 1
3 3 2 1 1
3 3 2 2
3 3 3 1
정답 코드
#include<iostream>
using namespace std;
int dp[10001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
for (int i = 1; i < 4; i++) dp[i] = i;
for (int i = 4; i < 10001; i++) dp[i] = dp[i - 3] + i / 2 + 1;
int t; cin >> t;
while (t--) {
int a; cin >> a;
cout << dp[a] << "\n";
}
}
728x90
반응형
'알고리즘 공부 > C++' 카테고리의 다른 글
[G1] 백준 24042번 횡단보도 C++ 최단 경로, 다익스트라, dijkstra (4) | 2024.09.07 |
---|---|
백준 12919번 A와 B 2 C++ 백트래킹, 재귀, 문자열 (0) | 2024.09.06 |
SWEA 5648번 [모의 SW 역량테스트] 원자 소멸 시뮬레이션 C++ 구현, 시뮬레이션 (0) | 2024.09.06 |
백준 18428번 감시 피하기 C++ 백트래킹, BFS, 완전 탐색, 구현, 시뮬레이션 (0) | 2024.09.06 |
SWEA 1494번 D4 사랑의 카운슬러 C++ 백트래킹, DFS (0) | 2024.09.06 |