/images/logo.png

1947 선물 전달

https://www.acmicpc.net/problem/1947 풀이: a[i] : i명이 선물을 나눠갖는 경우의 수 a[i - 1] * (i - 1) : i번 째 사람이 i - 1 번째 사람의 선물을 골랐을 경우 a[i - 2] * (i - 1) : i번 째 사람이 i - 1 번째 사람의 선물을 고르지 않았을 경우 주의사항: a[1] 일 때 즉, 1명 일 때 경우의 수가 아무것도 하지않는 것 1개일줄 알았으나 0개로 취급. 너무 큰 수가 계산되므로 주어진 수로 나눈 나머지를 출력한다.

1964 오각형, 오각형, 오각형…

https://www.acmicpc.net/problem/1964 풀이: 1,5,12,22…. 더해가는 숫자가 3씩 증가되므로 1+3*Σn+n 이라고 할 수 있다. 3*n(n+1)/2+n+1 이 되고 (n+1)로 묶어서 정리하면 (n+1)(3n+2)/2 가 된다. 이를 45678로 나눈 나머지로 출력하면 된다. 코드: 사용언어 : Python 3 1 2 n=int(input()) print((n+1)*(3*n+2)//2%45678)

1977 완전제곱수

https://www.acmicpc.net/problem/1977 풀이: m 이상 n이하의 완전제곱수를 다 더한 후 최솟값을 출력 만약 sum이 0이라면 -1을 출력 코드: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <iostream> using namespace std; int main(void) { int m, n, mini = 0, sum = 0, i = 1; cin >> m >> n; while (true) { if (i*i >= m) { if (i * i > n) break; if (mini == 0) mini = i * i; sum += i * i; } i++; } if (sum == 0) cout << "-1" << endl; else cout << sum << endl << mini << endl; return 0; }

2011 암호코드

https://www.acmicpc.net/problem/2011 풀이: dp[a]를 a자리 까지 숫자를 암호화 할 수 있는 가짓수 라고 하자. (a - 1) * 10 + a 가 10~26 사이라면 dp[a] = dp[a - 1] + dp[a - 2] 가 된다. 10~26 사이가 아니라면, dp[a] = dp[a - 1] 이 된다. 이 때, a 가 0 이라면, 암호를 해석 할 수 없으므로 0을 출력한다. (이 때, (a - 1 * 10 + a) 가 10 ~ 26 사이라면 가능하므로 주의하자) 정답이 매우 클 수 있으므로, 1000000으로 나눈 나머지를 출력한다.

2018 수들의 합5

https://www.acmicpc.net/problem/2018 풀이: (i + 1) + (i + 2) + (i + 3) + … + (i + j) = n i * j + (1 + 2 + 3 + … + j) = n n - (1 + 2 + 3 + … + j) = i * j n - j*(j+1)/2 = i * j (n - j*(j+1)/2) / j = i 즉 (n - j*(j+1)/2) / j 가 정수 (n - j*(j+1)/2) % j == 0 코드: 사용언어 : Python 3

2240 자두나무

https://www.acmicpc.net/problem/2240 풀이: s[t][w]를 자두의 남은 이동수가 w이고, 1 ~ t번째 자두까지 받아먹을 수 있는 최대 갯수 t의 숫자를 늘리며 이전 번째 자두수에서 +1을 해준다. 자두나무가 같다면 w를 같게 다르다면 +1해준다. 이때 w가 최대 이동횟수를 넘지않도록 주의한다. 코드: 사용언어 : c++ {% highlight c++ %} #include #include using namespace std; int T, w, a[1002]; int s[1002][32] = { 0 }; int main(void) { cin » T » w; int m = 0; a[0] = 1; s[0][w] = 1; for (int i = 1; i <= T; i++) cin » a[i]; for (int i = 1; i <= T; i++) for (int t = 0; t < i; t++) for (int y = 0; y <= w; y++) { if (a[i] !