[BaekJoon 2231][๐ŸŸค2] ๋ถ„ํ•ดํ•ฉ

Date :   Updated :

โ“ ๋ฌธ์ œ

๋ฐฑ์ค€ 2231 - โ€œ๋ถ„ํ•ดํ•ฉโ€

๐ŸŽฏ ๋‚œ์ด๋„

Bronze ๐ŸŸค2

๐Ÿง  ํ’€์ด

1. ๋‚ด ํ’€์ด (๋ธŒ๋ฃจํŠธ ํฌ์Šค)

- ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Brute Force

- ์„ค๋ช…

๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ํ˜„์žฌ ์ˆซ์ž ์ž์ฒด์™€ ๊ทธ ์ˆซ์ž์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋‹ค.

์•ˆ์ชฝ ๋ฐ˜๋ณต๋ฌธ์—์„œ ํ˜„์žฌ ๊ตฌํ˜„ ์ƒ์œผ๋กœ๋Š” O(1)์ด์ง€๋งŒ pow๋ผ๋Š” ๋น„์‹ผ ์—ฐ์‚ฐ๋„ ์žˆ๊ณ  ์ƒ์ˆ˜ ์‹œ๊ฐ„์œผ๋กœ ์ณ๋„ ๊ฝค๋‚˜ ๋น„์‹ผ ์—ฐ์‚ฐ์ด๋ผ ๋ณ„๋กœ ์ข‹์ง€๋Š” ์•Š๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

N ๋ฒ”์œ„ ๋‚ด์˜ ๋ชจ๋“  ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ์ž๋ฆฟ์ˆ˜ ์ฒดํฌ์™€ ๋ง์…ˆ/๋บŒ์…ˆ ์—ฐ์‚ฐ์„ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์ฝ”๋“œ

๋‚ด ํ’€์ด ์ฝ”๋“œ
#include <iostream>

#include <cmath>


using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int iN{};
    int iResult{};
    cin >> iN;

    for(int i = 1; i < iN; ++i)
    {
        int iSum{ i };
        int iTemp{ i };

        for(int j = 6; j >= 0; --j) // ๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ์ˆซ์ž๋ฅผ ๋”ํ•จ
        {
            int iDivide{ iTemp / static_cast<int>(pow(10, j))};

            if(iDivide == 0)
            {
                continue;
            }

            iTemp -= iDivide * static_cast<int>(pow(10, j));
            iSum += iDivide;
        }

        if(iSum == iN)
        {
            iResult = i;
            break;
        }
    }

    cout << iResult;

    return 0;
}

2. ์ถ”๊ฐ€ ํ’€์ด (์ตœ์ ํ™”๋œ ๋ธŒ๋ฃจํŠธ ํฌ์Šค)

- ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Brute Force

- ์„ค๋ช…

๋‚ด ์ƒ๊ฐ์— ๊ฐ€์žฅ ์ •์„ ํ’€์ด์ธ๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ๊ดœ์ฐฎ์€ ํŠธ๋ฆญ์ด ๋ช‡ ๊ฐœ ์žˆ์–ด์„œ ์ข‹์€ ํ’€์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

  1. int ์ž๋ฃŒํ˜•์„ string์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ํ†ตํ•ด ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
  2. ๊ฐ ์ž๋ฆฟ์ˆ˜๊ฐ€ 9์ผ ๋•Œ ์ž๋ฆฟ์ˆ˜์˜ ํ•ฉ์ด ์ตœ๋Œ€์ด๋ฏ€๋กœ iN - 9 * iDigit์ด ์ตœ์†Ÿ๊ฐ’์ด ๋œ๋‹ค.
  3. ํ˜„์žฌ ์ˆซ์ž์— mod ์—ฐ์‚ฐ, ๋‚˜๋ˆ—์…ˆ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์ ์€ ๋ฐ˜๋ณต์œผ๋กœ ๊ฐ ์ž๋ฆฟ์ˆ˜ ๋”ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด ์ƒ๋‹นํžˆ ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O((log N)ยฒ) ๊นŒ์ง€ ์ค„์˜€์œผ๋ฉฐ, ์ด๋Š” ๊ฑฐ์˜ ์ƒ์ˆ˜ ์‹œ๊ฐ„์œผ๋กœ ๋ด๋„ ๋  ์ •๋„๋กœ ๋น ๋ฅด๋‹ค.

- ์ฝ”๋“œ

์ถ”๊ฐ€ ํ’€์ด ์ฝ”๋“œ
#include <iostream>

#include <string>


using namespace std;

int DigitSum(int iInput);

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int iN{};
    int iResult{};
    cin >> iN;

    int iDigit{ static_cast<int>(to_string(iN).length()) }; // string์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค ๋ฌธ์ž์—ด ๊ธธ์ด๋กœ ์ž๋ฆฟ์ˆ˜ ๊ตฌํ•จ
    int iMin{ max(1, iN - 9 * iDigit) };    // ์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ

    for(int i = iMin; i < iN; ++i)
    {
        int iSum{ i + DigitSum(i) };

        if(iSum == iN)
        {
            iResult = i;
            break;
        }
    }

    cout << iResult;

    return 0;
}

int DigitSum(int iInput)
{
    int iSum{};

    while(iInput)   // ๊ฐ ์ž๋ฆฟ์ˆ˜ ๋”ํ•˜๊ธฐ
    {
        iSum += iInput % 10;
        iInput /= 10;
    }

    return iSum;
}

๐Ÿ’ญ ํ›„๊ธฐ

์–ด๋– ํ•œ ์ •์ˆ˜์˜ ์ „์ฒด ์ž๋ฆฟ์ˆ˜์˜ ํฌ๊ธฐ๋ฅผ ์•Œ์•„๋‚ด๋Š” ํŠธ๋ฆญ๊ณผ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ตœ์†Œํ•œ์˜ ๋ฐ˜๋ณต๋งŒ์œผ๋กœ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ์‹์ด ํฅ๋ฏธ๋กœ์› ๋‹ค. ์•Œ์•„๋‘๋ฉด ์•ž์œผ๋กœ ๊ณ„์†ํ•ด์„œ ์“ธ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ์ œ๋Œ€๋กœ ์ˆ™์ง€ํ•ด๋†“์ž.

๐Ÿ”— ์ฐธ๊ณ ์ž๋ฃŒ

Comments