๋ฌธ์
๋จ์ด ์๊ธฐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
์ค์์ด๋ ์์ด ๋จ์ด๋ฅผ ์ธ์ฐ๋ ค๊ณ ํ๋ค. ์ฌ์ ์๋ N๊ฐ์ง ๋จ์ด๊ฐ ์ ํ ์๋ค. ๋ชจ๋ ๋จ์ด๋ ์๋ฌธ์์ด๋ค. ๋จ์ด ์์ ์๋ ๋ชจ๋ ์ํ๋ฒณ์ ์ ๋, ๊ทธ ๋จ์ด๋ฅผ ์์ ํ ์๋ค๊ณ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ค์ด ์ฃผ์ด์ง๋ค.
1 x
: ์ํ๋ฒณ x๋ฅผ ์๋๋ค.2 x
: ์ํ๋ฒณ x๋ฅผ ๊ธฐ์ตํด ๋ธ๋ค.
์ฒ์์ ๋ชจ๋ ์ํ๋ฒณ์ ๊ธฐ์ตํ๋ ์ํ๊ณ , ๋ชจ์์ ์๋ฒฝํ๊ฒ ์ธ์ ๊ธฐ ๋๋ฌธ์ ์ ๋ ์์ง ์๋๋ค.
๊ฐ ์ฟผ๋ฆฌ๋ง๋ค ์์ ํ ์๊ณ ์๋ ๋จ์ด์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ.
ํ์ด
- ๋จ์ด์ ๊ธธ์ด๊ฐ 10^3์ด๋ ๋๋ฏ๋ก ์ผ์ผ์ด ๋น๊ตํ๊ธฐ ํ๋ฌ
- bit ์ฐ์ฐ์ ํตํด ๋น๊ตํ ์ ์๋ ๋ฐฉ์ ์๊ฐ
- ์ํ๋ฒณ 26์๋ฆฌ๋ฅผ bitmap์ผ๋ก ๋ํ๋ผ ๋
- 2^26 < (2^3)^9 < 10^10 ์ด๋ฏ๋ก ์ถฉ๋ถํ int ํ์ผ๋ก ํํ ๊ฐ๋ฅ
์ฝ๋
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int N, M;
vector<int> words;
int remember;
// bit๋ก ํํ
// 26๊ธ์ => 2์ง์๋ก ํํ
int getWordNumber() {
int count = 0;
for (int i = 0; i < words.size(); i++) {
if (words[i] == (words[i] & remember)) {
count += 1;
}
}
return count;
}
int getQueryResult(int func, int target) {
int idx = target - 'a';
if (func == 1) {
// forget
remember &= ~(1 << idx);
}
else {
// remember
remember |= (1 << idx);
}
return getWordNumber();
}
int main() {
cin >> N >> M;
remember = (1 << 27)-1;
for (int i = 0; i < N; i++) {
string str; cin >> str;
int wordBit = 0;
for (int j = 0; j < str.length(); j++) {
int idx = str[j] - 'a';
wordBit |= 1 << idx;
}
words.push_back(wordBit); // ๋นํธ ์ ์ฅ
}
for (int i = 0; i < M; i++) {
int func; char target;
cin >> func >> target;
cout << getQueryResult(func, target) << '\n';
}
}
๊ฒฐ๊ณผ
์์ด๋ | ๋ฉ๋ชจ๋ฆฌ | ์๊ฐ | ์ฝ๋ ๊ธธ์ด |
---|---|---|---|
gmldms784 | 2160 | 3436 | 955 |
๋ฐ์ํ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 17370 :: ์ก๊ฐํ ์ฐ๋ฆฌ ์์ ๊ฐ๋ฏธ (0) | 2021.08.24 |
---|---|
[c++] BOJ 1941 :: ์๋ฌธ๋ ์น ๊ณต์ฃผ (0) | 2021.08.24 |
[c++] BOJ 1062 :: ๊ฐ๋ฅด์นจ (0) | 2021.08.10 |
[c++] BOJ 17244 :: ์๋ง๋ค์ฐ์ฐ (0) | 2021.08.02 |
[c++] BOJ 12888 :: ์์ ์ด์ง ํธ๋ฆฌ ๋๋ก ๋คํธ์ํฌ (0) | 2021.07.20 |
Comment