๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/์ด๋ก 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] 8์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ (1~10์–ต)

8์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ (1~10์–ต) C++

๊ตฌ๊ธ€ ์ž…์‚ฌ๋ฌธ์ œ

๊ตฌ๊ธ€ ์ž…์‚ฌ ๋ฌธ์ œ ์ค‘, 1๋ถ€ํ„ฐ 100000 ์‚ฌ์ด์ธ N์ด ์ฃผ์–ด์ง€๊ณ , 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜์—์„œ 8์ด ๋‚˜์˜ค๋Š” ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ 88์ด๋ผ๋Š” ์ˆซ์ž๊ฐ€ ์žˆ์œผ๋ฉด, 88์€ 8์ด ๋‘ ๊ฐœ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ, 2๋กœ ์นด์šดํŠธํ•ด์•ผ ๋œ๋‹ค.

N์ด ์ตœ๋Œ€ 10๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์—, 10๋งŒ์˜ ์ž๋ฆฌ์ˆ˜๋Š” 6์ด๋ฏ€๋กœ, ์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์ƒ๊ฐํ•ด๋„ 60๋งŒ์ด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ’€์ด๋“ค์ด ์žˆ๊ฒ ์ง€๋งŒ, ๊ฐ ์ˆซ์ž๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ์ˆซ์ž์˜ ์ž๋ฆฌ์ˆ˜๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ํ™•์ธํ•ด๋„ 1์ดˆ ์•ˆ์— ์นด์šดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

10์–ต์œผ๋กœ ํ™•์žฅ

N์ด 1๋ถ€ํ„ฐ ์ตœ๋Œ€ 10์–ต๊นŒ์ง€๋ผ๊ณ  ์ฃผ์–ด์ง„๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผ ํ• ๊นŒ?

9์–ต๊นŒ์ง€๋ผ๊ณ ๋งŒ ํ•ด๋„ 9์–ต * 9์–ต์˜ ์ž๋ฆฌ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํ•˜๊ฒŒ ์™„์ „ ํƒ์ƒ‰์„ ํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋œ๋‹ค.

์™„์ „ ํƒ์ƒ‰์ด ์•„๋‹Œ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ™•์žฅ๋œ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์€, ๊ฐ ์ž๋ฆฌ ์ˆ˜๋งˆ๋‹ค ๋‚˜๋ˆ ์„œ 8์ด ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด N์ด 4์ž๋ฆฌ์˜ ์ˆ˜ ๋ผ๋ฉด, ๊ฒฝ์šฐ๋ฅผ 4๊ฐ€์ง€๋กœ ๋‚˜๋ˆˆ ๋’ค ํšŸ์ˆ˜๋ฅผ ๋”ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์ด๋•Œ ํ•œ์ž๋ฆฌ ํ•œ์ž๋ฆฌ๋งˆ๋‹ค ํ™•์ธํ•  ๋•Œ, ๊ทธ ํ•œ ์ž๋ฆฟ์ˆ˜๋ฅผ ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ ์•ผ ํ•œ๋‹ค.

 

8 ๋ณด๋‹ค ์ž‘์„ ๋•Œ
8 ์ผ ๋•Œ
8 ๋ณด๋‹ค ํด ๋•Œ

 

์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆˆ ๋’ค, ํ•ด๋‹นํ•˜๋Š” ์ž๋ฆฌ์ˆ˜์˜ ์™ผ์ชฝ ์ˆ˜๋“ค๊ณผ ์˜ค๋ฅธ์ชฝ ์ˆ˜ ๋“ค์„ ํ™•์ธํ•˜๊ณ  ์นด์šดํŠธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.

8 ๋ณด๋‹ค ์ž‘์„ ๋•Œ

52723์ด๋ผ๋Š” ์ˆซ์ž๊ฐ€ ์žˆ๊ณ , ์„ธ ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ 8์ด ๋ช‡ ๋ฒˆ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค๊ณ  ํ•˜์ž.

52xxx ์ผ ๋•Œ๋Š”, ์„ธ ๋ฒˆ์งธ ์ž๋ฆฌ์ˆ˜๊ฐ€ 7์ž„์œผ๋กœ 8์ด ๋“ฑ์žฅํ•  ์ˆ˜ ์—†๋‹ค.

008.., 018.., 028.., ... 518..๊นŒ์ง€ ์•ž์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋ฉด ์ด 0~51๊นŒ์ง€๊นŒ์ง€ 52์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

8๋’ค์˜ .. ์€ 0๋ถ€ํ„ฐ 99๊นŒ์ง€ ์ด 100๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ 52*100
์ฆ‰, (์•ž์ž๋ฆฌ ์ˆ˜) * 10^๋’ท์ž๋ฆฌ์ˆ˜๋ฅผ ๋”ํ•ด์•ผ ํ•œ๋‹ค.

8 ์ผ ๋•Œ

์•ž์—์„œ 8๋ณด๋‹ค ์ž‘์„ ๋•Œ์—์„œ 528..๊นŒ์ง€ ์นด์šดํŠธ๊ฐ€ ๋˜๋ฏ€๋กœ 8๋ณด๋‹ค ์ž‘์„ ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ,

๋’ค์˜ ..์—์„œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์ธ 0~ ๋’ท์ž๋ฆฌ ์ˆ˜ -> ๋’ท์ž๋ฆฌ ์ˆ˜ + 1์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰ (์•ž์ž๋ฆฌ ์ˆ˜) * 10^๋’ท์ž๋ฆฌ์ˆ˜ + ๋’ท์ž๋ฆฌ ์ˆ˜+1์„ ๋”ํ•ด์•ผ ํ•œ๋‹ค.

8 ๋ณด๋‹ค ํด ๋•Œ

8 ๋ณด๋‹ค ํด ๋•Œ๋Š” 529.. ์ž„์œผ๋กœ 528..๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์ˆ˜๋ฅผ ๋”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ 0~52๊นŒ์ง€์ธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 52+1์ด๋ฏ€๋กœ (์•ž์ž๋ฆฌ ์ˆ˜+1) * 10^๋’ท์ž๋ฆฌ์ˆ˜๋ฅผ ๋”ํ•ด์•ผ ๋œ๋‹ค.

์†Œ์Šค์ฝ”๋“œ

#include <iostream>
using namespace std;
long long result;
long long sumResult(int leftNum, int rightNum, int swc, int digit);
int main(void) {
    int N;
    cin >> N;
    int rightNum = 0;
    int leftNum = N;
    int nowdigit = 1;
    while (leftNum) {
        int lastNum = leftNum % 10;
        leftNum /= 10;
        int swc;
        if (lastNum < 8) swc = -1;
        else if (lastNum == 8) swc = 0;
        else swc = 1;
        result += sumResult(leftNum, rightNum, swc, nowdigit);
        rightNum += lastNum * nowdigit;
        nowdigit *= 10;
    }
    cout << result << '\n';
    return 0;
}
long long sumResult(int leftNum, int rightNum, int swc, int digit) {
    if (swc == -1) {
        return leftNum * digit;
    }
    else if (swc == 0) {
        return leftNum * digit + rightNum + 1;
    }
    else {
        return (leftNum + 1) * digit;
    }
}

๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋“ค์„ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์œ„์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.