๋์ด๋ | ์ ๋ต๋ฅ |
โ โ | 69.5% |
๋ฌธ์
์ ์ N์ด ์ฃผ์ด์ง๋ N!์ ๊ตฌํ์ฌ ๋ง๋ค์ด์ง ์ซ์๊ฐ ๋ ์๋ฆฌ ์ด์์ด๋ฉด ํ ์๋ฆฌ๊ฐ ๋ ๋๊น์ง ์๋ฆฟ์๋ฅผ ๋ํ ๊ฐ์ ์ถ๋ ฅํ๋ค.
0 ≤ N ≤ 10000
ํด๊ฒฐ
key point, int์ ๋ฒ์๊ฐ ๋์ด๊ฐ๋ N!์ ๊ณ์ฐํ๊ธฐ ์ํ์ฌ ๊ฐ ์๋ฆฟ์๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ์ํจ๋ค.
- ๊ฐ ์๋ฆฟ์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ v๋ผ๊ณ ํ๋ค. ์๊ฐ 123์ด๋ผ๋ฉด v[0]=3, v[1]=2, v[1] ์ฒ๋ผ ์ญ์์ผ๋ก ์ ์ฅํ๋ค.
- ์ผ๋จ 1๋ถํฐ N๊น์ง ๊ณฑํ์ฌ N!์ ๊ตฌํด์ผํ๋ฏ๋ก v๋ฐฐ์ด์ 1์ ๋ฃ์ด์ค๋ค. → ์ฌํ๊น์ง ๊ตฌํ ์ซ์๊ฐ v๊ฐ ๋จ.
- 2๋ถํฐ N๊น์ง ๋ณ์ i๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๋ฉด์ v์ ๊ฐ ์๋ฆฟ์ v[j](๋ณ์ jํ์ฉ)์ i๋ฅผ ๊ณฑํด์ค๋ค.
- ๊ณฑํ ๊ฐ์ r์ด๋ผ๊ณ ํ ๋ r์ 10์ผ๋ก ๋๋ ๋๋จธ์ง(=์ผ์ ์๋ฆฌ ์)๋ฅผ j๋ฒ์งธ ์๋ก ์ ์ฅํ๋ค.
- ๋ค์ r์ 10์ผ๋ก ๋๋ ์๊ฐ ์ฌ๋ฆผ์๊ฐ๋์ด j+1๋ฒ์งธ์ ํ์ฉ๋๋ค.
- v์ ๊ฐ ์๋ฆฟ์์ i๋ฅผ ๋ชจ๋ ๊ณฑํ๋๋ฐ ์ฌ๋ฆผ์ r์ด ์๋ค๋ฉด v.push_back(r%10)์ ํ์ฉํ์ฌ ์ถ๊ฐํด์ค๋ค.
- ์ด๋ ๊ฒ i๊ฐ N์ผ ๋ ๊น์ง ๋ฐ๋ณตํ์ฌ v์ ๋ชจ๋ ์๋ฅผ ์ ์ฅํ๋ค๋ฉด
- ๊ฐ๊ฐ ์๋ฆฟ์๋ฅผ ๋ํ ๋๋ ๊ฐ์ ๋ฐฉ๋ฒ์ ํ์ฉํ์ฌ ๋ํ์ฌ ์ถ๋ ฅํ๋ค.
์ฒ์์ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ณ ๋ฏผ์ ํ๋ค๊ฐ ๊ฒฐ๊ตญ ๊ฒ์์ ํตํด์ ์๊ฒ ๋์๋๋ฐ, ์๋ ๋ธ๋ก๊ทธ๊ฐ ๋์์ด ๋ง์ด ๋๋ค. ํ์ง๋ง ์์ง๋ ๋ง์ด ํท๊ฐ๋ฆฌ๊ณ ^^.. ๋ ๋ง์ ๋ฌธ์ ๋ฅผ ํ์ด๋ด์ผ ์์ ํ ๋ด๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <iostream>
#include <vector>
using namespace std;
int n, i, j, r, ans;
vector<int> v;
int main() {
scanf("%d", &n);
v.push_back(1);
for (i = 2; i <= n; i++) {
j = 0;
while (!v[j]) j++;
for (r = 0 ; j < v.size(); j++) {
r += v[j] * i; // r = v[j] * i + r;
v[j] = r % 10; // push_back()ํ๋ฉด ๋ฌดํ๋ฃจํ.
r /= 10;
}
while (r) {
v.push_back(r % 10);
r /= 10;
}
}
for (i = 0, r = 0; i < v.size(); i++) {
if (!v[i]) continue;
r += ans + v[i];
ans = r % 10;
r /= 10;
}
while (r) {
ans += r % 10;
r /= 10;
}
printf("%d", ans);
return 0;
}
|
cs |
'๐ฅ PS(Problem Solving) ๐ฅ > goorm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌ๋ฆLEVEL] ์ธ์ธ๊ฐ ๋๊ณ ์ถ์ ๋ฏผ์ (0) | 2020.03.16 |
---|---|
[๊ตฌ๋ฆLEVEL] A4 ์ฉ์ง๋ฅผ ๋ง๋ค์ (0) | 2020.03.16 |
[๊ตฌ๋ฆLEVEL] ์ํฌ์ ๋ฒ์ค (0) | 2020.03.16 |
[๊ตฌ๋ฆLEVEL] 1๋ฑ๊ณผ 2๋ฑ (0) | 2020.03.16 |
[๊ตฌ๋ฆLEVEL] ํต์ ๋น ๊ณ์ฐํ๊ธฐ (0) | 2020.03.12 |
๋๊ธ