[BaekJoon 15829][๐ŸŸค2] Hashing

Date :   Updated :

โ“ ๋ฌธ์ œ

๋ฐฑ์ค€ 15829 - โ€œHashingโ€

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

Bronze ๐ŸŸค2

๐Ÿง  ํ’€์ด

1. ๋‚ด ํ’€์ด (ํ•ด์‹ฑ)

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

  • string, Hashing

- ์„ค๋ช…

์ž๋ฃŒํ˜•๊ณผ Modular ์—ฐ์‚ฐ์„ ์ž˜ ์ƒ๊ฐํ•ด๊ฐ€๋ฉฐ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ ์˜์™ธ๋กœ ํ•˜๋‚˜๋งŒ ์ž˜๋ชป ์จ๋„ ๋ถ€๋ถ„ ์ ์ˆ˜ ๋ฐ–์— ์–ป์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํŠนํžˆ๋‚˜ ๊ณฑํ•ด์ง€๋Š” ๊ฐ’์ด 31์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ๊ณ„์†ํ•ด์„œ ๋”ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ˆœ์‹๊ฐ„์— long long์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์œผ๋ฏ€๋กœ, '์ž๋ฃŒํ˜•'๊ณผ 'Modular ์—ฐ์‚ฐ'์˜ ํŠน์ง•์„ ์ž˜ ์ƒ๊ฐํ•ด์„œ ํ’€์–ด์•ผ ์™„์ „ํžˆ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์ฝ”๋“œ

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

#include <string>

#include <cmath>


using namespace std;

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

    constexpr int iR{ 31 };
    constexpr int iM{ 1234567891 };

    int iL{};
    string strInput{};

    cin >> iL >> strInput;

    // int ๋ฒ”์œ„๋ฅผ ๋„˜์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ long long ์ž๋ฃŒํ˜• ์‚ฌ์šฉ
    long long iSum{};
    long long iPower{ 1 };
    for(int i = 0; i < iL; ++i)
    {
        long long llVal{ strInput[i] - 'a' + 1};

        // llVal <= 26, iPower < iM ์ด๋ฏ€๋กœ long long์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์ง€ ์•Š๋Š”๋‹ค
        // ๋”ฐ๋ผ์„œ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์˜ ๋ถ„๋ฐฐ ๋ฒ•์น™์€ ์•ˆ ์จ๋„ ๋จ
        iSum = (iSum + llVal * iPower) % iM;
        iPower = (iPower * iR) % iM;
    }

    cout << iSum;

    return 0;
}

๐Ÿ’ญ ํ›„๊ธฐ

์‰ฌ์›Œ ๋ณด์ด์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ์ž๋ฃŒํ˜•์˜ ๋ฒ”์œ„์™€ Modular ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ถ€๋ถ„ ์ ์ˆ˜๋งŒ ๊ณ„์† ๋งž๊ฒŒ ๋œ๋‹ค. ๋‚˜ ๋˜ํ•œ ๊ทธ๋žฌ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์ง€์‹์„ ์ œ๋Œ€๋กœ ์•Œ์•„๋‘์ž.

Comments