๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 11478๋ฒˆ: ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜

by nitronium102 2022. 7. 17.

๋ฌธ์ œ

๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, S์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ S์—์„œ ์—ฐ์†๋œ ์ผ๋ถ€๋ถ„์„ ๋งํ•˜๋ฉฐ, ๊ธธ์ด๊ฐ€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ababc์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc๊ฐ€ ์žˆ๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ๊ฒƒ์˜ ๊ฐœ์ˆ˜๋Š” 12๊ฐœ์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. S๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ธธ์ด๋Š” 1,000 ์ดํ•˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— S์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด

"์„œ๋กœ ๋‹ค๋ฅธ" ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ๋ฌธ์ œ๋กœ, set์„ ์“ฐ๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค. 

์ฒ˜์Œ์—๋Š” ๊ฐœ์ˆ˜ ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ, ์‹œ์ž‘ ์ธ๋ฑ์Šค๋กœ๋„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ด๊ฑธ๋กœ ํ’€์—ˆ๋‹ค. ์ „์ž๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๊ฐ„๋‹จํ•œ ๊ฒƒ ๊ฐ™๋‹ค. 

#include <iostream>
#include <set>
using namespace std;

int main() {
    string s;

    cin >> s;

    set<string> subStr;
    /* 1) [0] [1] [2] [3] [4]
     * 2) [0-1] [1-2] [2-3] [3-4]
     * 3) [0-1-2] [1-2-3] [2-3-4]
     * 4) [0-1-2-3] [1-2-3-4]
     * 5) [0-1-2-3-4]
     * => 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ / 1๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ / 2๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ / ...
     */
    for (int i=0; i<s.length(); i++){
        string tmp = "";
        for (int j=i; j<s.length(); j++){
            tmp += s[j];
            subStr.insert(tmp);
        }
    }

    cout << subStr.size();
}

๋Œ“๊ธ€