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

C++ for PS

C++ map, set ์—์„œ ์ค‘๋ณต ํ‚ค ์‚ฝ์ž…์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

C++์—์„œ๋Š” insert ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

insert ํ•จ์ˆ˜์˜ ํ”„๋กœํ† ํƒ€์ž…: pair<iterator,bool> insert (const pair<const Key, Type>& val);

 

์ค‘๋ณต๋œ Key๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์‚ฝ์ž… ์„ฑ๊ณต ์‹œ, <insert๋˜์–ด์ง„ element์˜ iterator, true> ์˜ pair๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ค‘๋ณต๋œ Key๊ฐ€ ์กด์žฌํ•ด, ์‚ฝ์ž… ์‹คํŒจ ์‹œ, <์ค‘๋ณต๋œ Key์˜ element์˜ iterator, false> ์˜ pair๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

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

int main() {
    int T, N, i, j, ans;
    string value, key;
    map<string, int> m;
    pair<map<string, int>::iterator, bool> pr;

    cin >> T;
    while (T-- > 0) {
        m.clear();
        ans = 1;
        cin >> N;
        for (j = 0; j < N; j++) {
            cin >> value >> key;
            pr = m.insert(pair<string, int>(key, 1)); // ์ฃผ๋ชฉ !
            if (!pr.second) m[key]++; // Key๊ฐ€ ์ค‘๋ณต๋˜์–ด map์— ์‚ฝ์ž…ํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ์—” ์ง์ ‘ 1์„ ๋”ํ•ด์คŒ.
        }
        for (map<string, int>::iterator it = m.begin(); it != m.end(); it++) {
            ans *= it->second + 1;
        }
        cout << ans - 1 << "\n";
    }
}

boj 9375 ํŒจ์…˜์™• ์‹ ํ˜œ๋นˆ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ์ •๋ณด์ด๋‹ค.

map, set ์„ ํ™œ์šฉํ•˜๋‹ค๋ณด๋ฉด ๋ฌธ์ œ ๊ตฌ์กฐ ์ƒ ์ค‘๋ณต๋œ key๋ฅผ ์ผ๋ถ€๋Ÿฌ ์‚ฝ์ž…ํ•ด๋ณด๊ณ  ํ™•์ธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ, ์ค‘๋ณต๋œ Key ๊ฐ’์ด ๋ช‡ ๋ฒˆ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

std::map<std::string, int> temp;
auto itr = temp.find("my_key");
if (itr == temp.end()) {
    temp.insert({ "my_key", 1 });
} else {
    itr->second++;
}

์ด๋ ‡๊ฒŒ ์ž˜๋ชป๋œ ์ฝ”๋“œ๋กœ ์ฝ”๋”ฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ฝค ๋งŽ์€๋ฐ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์ด๋‹ค!

 

์ฐธ๊ณ  ๋งํฌ: https://yonmy.com/archives/9