[BaekJoon 14626][๐ŸŸค1] ISBN

Date :   Updated :

โ“ ๋ฌธ์ œ

๋ฐฑ์ค€ 14626 - โ€œISBNโ€

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

Bronze ๐ŸŸค1

๐Ÿง  ํ’€์ด

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

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

  • Brute Force, Mathematics

- ์„ค๋ช…

๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ ํ’€์ด์ด๋‹ค.

๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์ˆซ์ž์™€ ๊ฐ€์ค‘์น˜๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉฐ ์ „์ฒด ํ•ฉ์„ ๊ตฌํ•˜๊ณ , *์˜ ์ž๋ฆฌ๋ฅผ ์•Œ์•„๋‚ด์–ด ๊ฐ€์ค‘์น˜๋ฅผ ๊ตฌํ•˜๊ณ , 0 <= N < 10 ๊ตฌ๊ฐ„์„ ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋กœ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ๋‹ต์„ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.

๊ฐ€์žฅ ์ง๊ด€์ ์ด๊ณ  ์‹ค์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ๋ถ€๋ถ„์ด ์ ๊ธฐ ๋•Œ๋ฌธ์— ์ •์„์ ์ธ ํ’€์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ ๋Œ๋ฉฐ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด์ง€๋งŒ, N = 13์ด๊ธฐ์— ๊ฑฐ์˜ ์ƒ์ˆ˜์— ๊ฐ€๊น๋‹ค

- ์ฝ”๋“œ

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

#include <string>


using namespace std;

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

    string strInput{};
    cin >> strInput;

    int iSum{}; // *๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•ฉ
    int iWeight{};  // *์˜ ๊ฐ€์ค‘์น˜
    for(int i = 0; i < static_cast<int>(strInput.length()); ++i)
    {
        if(strInput[i] == '*')
        {
            iWeight = i % 2 == 0 ? 1 : 3;
            continue;
        }

        iSum += (strInput[i] - '0') * (i % 2 == 0 ? 1 : 3);
    }

    // 0 ~ 9๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ *์˜ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค
    for(int i = 0; i < 10; ++i)
    {
        if((iSum + i * iWeight) % 10 == 0)
        {
            cout << i;
            return 0;
        }
    }

    return 0;
}

2. ์ถ”๊ฐ€ ํ’€์ด (์ˆ˜ํ•™์  ํ’€์ด)

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

  • Mathematics, Arithmetic

- ์„ค๋ช…

๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์˜ ํŠน์„ฑ์„ ์‚ฌ์šฉํ•œ ์ˆ˜ํ•™์  ํ’€์ด์ด๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์‹ํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

\[(Sum + Weight * X) \% 10 == 0\]

์—ฌ๊ธฐ์„œ Weight์ด 1์ผ ๋•Œ์™€ 3์ผ ๋•Œ๊ฐ€ ๊ฐˆ๋ฆฐ๋‹ค.

  • Weight == 1์ธ ๊ฒฝ์šฐ

\[X = (10 - Sum \% 10) \% 10\]

  • Weight == 3์ธ ๊ฒฝ์šฐ (3์˜ ์—ญ์›์€ 7)

\[3X โ‰ก -Sum (mod 10)\] \[X = 7 * (10 - Sum \% 10) (mod 10)\]

๋”ฐ๋ผ์„œ Sum์„ ๊ตฌํ•ด์ฃผ๊ณ  ๋ถ„๊ธฐ๋ณ„๋กœ ๋”ฐ๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ณ„์‚ฐ๋งŒ ํ•˜๋ฉด, '๋ธŒ๋ฃจํŠธ ํฌ์Šค'์ฒ˜๋Ÿผ ๋ฃจํ”„๋ฅผ ๋Œ์ง€ ์•Š๊ณ ๋„ ํ•œ ๋ฒˆ์— ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์ด๋ก ์ƒ ๋น ๋ฅด๊ธด ํ•˜์ง€๋งŒ, ์ˆ˜์‹์„ ์ด๋Œ์–ด๋‚ด๋Š” ๊ณผ์ •์—์„œ ์‹ค์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ์ง๊ด€์„ฑ๋„ ์ข‹์ง€ ์•Š๋‹ค. ๊ทธ๋ž˜๋„ ์•Œ์•„๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์€ ํ’€์ด์ด๋‹ค.

Sum์„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์€ O(N)์ด์ง€๋งŒ ๊ฒฐ๊ณผ ๋„์ถœ์ด O(1)์ด๋‹ค.

- ์ฝ”๋“œ

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

#include <string>


using namespace std;

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

    string strInput{};
    cin >> strInput;

    int iSum{}; // *๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•ฉ
    int iWeight{};  // *์˜ ๊ฐ€์ค‘์น˜
    for(int i = 0; i < static_cast<int>(strInput.length()); ++i)
    {
        if(strInput[i] == '*')
        {
            iWeight = i % 2 == 0 ? 1 : 3;
            continue;
        }

        iSum += (strInput[i] - '0') * (i % 2 == 0 ? 1 : 3);
    }

    int iResult{};
    int iRight{ (10 - iSum % 10) % 10 };    // ์‹์— ๋”ฐ๋ผ ์šฐ๋ณ€์— ๋“ค์–ด๊ฐˆ ๊ฐ’

    if(iWeight == 1)
    {
        iResult = iRight;
    }
    else
    {
        // iWeight == 3์ธ ๊ฒฝ์šฐ ์—ญ์›์ธ 7์„ ๊ณฑํ•ด์ฃผ์–ด์•ผ ํ•จ
        iResult = (7 * iRight) % 10;
    }

    cout << iResult;

    return 0;
}

๐Ÿ’ญ ํ›„๊ธฐ

๋ธŒ๋ฃจํŠธ ํฌ์Šค๋กœ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์˜ ํŠน์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์ˆ˜์‹ํ™”ํ•˜์—ฌ ๋” ํšจ์œจ์ ์ธ ํ’€์ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์˜ ์ •ํ™•ํ•œ ์›๋ฆฌ๋ฅผ ์•Œ์•„๋‘๋ฉด ์•ž์œผ๋กœ ๋ฌธ์ œ ํ’€ ๋•Œ ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

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

Comments