알고리즘 문제/DP
[개쉬운 풀이] 백준 15989 1, 2, 3 더하기 4 (8일차)
odaebum
2024. 11. 29. 15:46
728x90
https://www.acmicpc.net/problem/15989
문제
생각
처음에는 이항계수 문제인 줄 알았다. 그러나 순서 상관 없이 오직 정수 1, 2, 3을 이용해서 모든 수를 만드는 문제이다.
그래서 처음 DP로 접근하여 생각을 해보았다.
정수 / 3으로 3이 몇개 들어가는지 계산을 해보았고 이후 각 3의 개수에 따라 2가 들어가는 갯수만 세주면 나머지 1은 자동으로 빈자리를 채워준다. 이렇게 생각하니 DP까지도 생각할 필요 없이 단순 계산으로 풀 수 있었다.
즉, N을 3으로 나누고, 3을 몇개 쓸 것인지 for 문을 통해서 돌린다. 이후 3으로 사용하고 남은 나머지 값(=tmp)에 tmp/2 +1 하면 답이다.
->tmp/2 + 1에서 +1을 한 이유는 2를 아예 안쓰는 경우를 더한 것이다.
풀이
#include <iostream>
#include <vector>
using namespace std;
const int MAX = 10001;
int process(int n){
int answer = 0;
for(int i = 0; i <= (n/3); i++){
int tmp = n - (3*i);
answer += tmp/2+1;
}
return answer;
}
int main(){
int t;
cin >> t;
while(t--){
int n;
cin >> n;
cout << process(n) << endl;
}
return 0;
}
728x90