๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/goorm

[๊ตฌ๋ฆ„LEVEL] ์–ด๋ ค์šด ๋ฌธ์ œ

by dar0m! 2020. 3. 16.
๋‚œ์ด๋„ ์ •๋‹ต๋ฅ 
โ˜…โ˜… 69.5%

 

 

๊ตฌ๋ฆ„LEVEL

๋‚œ์ด๋„๋ณ„ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ์œผ๋กœ์จ SW ์—ญ๋Ÿ‰์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

level.goorm.io

๋ฌธ์ œ

์ •์ˆ˜ N์ด ์ฃผ์–ด์งˆ๋•Œ N!์„ ๊ตฌํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ์ˆซ์ž๊ฐ€ ๋‘ ์ž๋ฆฌ ์ด์ƒ์ด๋ฉด ํ•œ ์ž๋ฆฌ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋”ํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

0 N ≤ 10000

ํ•ด๊ฒฐ

key point, int์˜ ๋ฒ”์œ„๊ฐ€ ๋„˜์–ด๊ฐ€๋Š” N!์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅ์‹œํ‚จ๋‹ค.
  1. ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด์„ v๋ผ๊ณ ํ•œ๋‹ค. ์ˆ˜๊ฐ€ 123์ด๋ผ๋ฉด v[0]=3, v[1]=2, v[1] ์ฒ˜๋Ÿผ ์—ญ์ˆœ์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
  2. ์ผ๋‹จ 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๊ณฑํ•˜์—ฌ N!์„ ๊ตฌํ•ด์•ผํ•˜๋ฏ€๋กœ v๋ฐฐ์—ด์— 1์„ ๋„ฃ์–ด์ค€๋‹ค. → ์—ฌํƒœ๊นŒ์ง€ ๊ตฌํ•œ ์ˆซ์ž๊ฐ€ v๊ฐ€ ๋จ.
  3. 2๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ณ€์ˆ˜ i๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ v์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜ v[j](๋ณ€์ˆ˜ jํ™œ์šฉ)์— i๋ฅผ ๊ณฑํ•ด์ค€๋‹ค.
  4. ๊ณฑํ•œ ๊ฐ’์„ r์ด๋ผ๊ณ  ํ•  ๋•Œ r์„ 10์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€(=์ผ์˜ ์ž๋ฆฌ ์ˆ˜)๋ฅผ j๋ฒˆ์งธ ์ˆ˜๋กœ ์ €์žฅํ•œ๋‹ค.
  5. ๋‹ค์‹œ r์„ 10์œผ๋กœ ๋‚˜๋ˆˆ ์ˆ˜๊ฐ€ ์˜ฌ๋ฆผ์ˆ˜๊ฐ€๋˜์–ด j+1๋ฒˆ์งธ์— ํ™œ์šฉ๋œ๋‹ค.
  6. v์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜์— i๋ฅผ ๋ชจ๋‘ ๊ณฑํ–ˆ๋Š”๋ฐ ์˜ฌ๋ฆผ์ˆ˜ r์ด ์žˆ๋‹ค๋ฉด v.push_back(r%10)์„ ํ™œ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  7. ์ด๋ ‡๊ฒŒ i๊ฐ€ N์ผ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ v์— ๋ชจ๋“  ์ˆ˜๋ฅผ ์ €์žฅํ–ˆ๋‹ค๋ฉด
  8. ๊ฐ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋”ํ•  ๋•Œ๋„ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ๋”ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

์ฒ˜์Œ์— ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผ์„ ํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๊ฐ€ ๋„์›€์ด ๋งŽ์ด ๋๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง๋„ ๋งŽ์ด ํ—ท๊ฐˆ๋ฆฌ๊ณ ^^.. ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ด์•ผ ์™„์ „ํžˆ ๋‚ด๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

[C/C++]์–ด๋–ป๊ฒŒ ํฐ ์ˆ˜(100๋งŒ์ด์ƒ)์˜ ํŒฉํ† ๋ฆฌ์–ผ๊ฐ’์„ ๊ตฌ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์ด์ „ ํฌ์ŠคํŠธ์—์„œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋ฒ• ํฐ ์ˆ˜์— ๋Œ€ํ•œ ํŒฉํ† ๋ฆฌ์–ผ ๊ฐ’์„ ๊ตฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๊ทธ ์›๋ฆฌ์— ๋Œ€ํ•ด...

blog.naver.com

 

์ฝ”๋“œ

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

 

๋Œ“๊ธ€