Hello Ocean! ๐ŸŒผ

[๋ฐฑ์ค€/C++] 18119. ๋‹จ์–ด ์•”๊ธฐ ๋ณธ๋ฌธ

Algorithm

[๋ฐฑ์ค€/C++] 18119. ๋‹จ์–ด ์•”๊ธฐ

bba_dda 2021. 8. 10. 18:55
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

https://www.acmicpc.net/problem/18119

 

18119๋ฒˆ: ๋‹จ์–ด ์•”๊ธฐ

์ค€์„์ด๋Š” ์˜์–ด ๋‹จ์–ด๋ฅผ ์™ธ์šฐ๋ ค๊ณ  ํ•œ๋‹ค. ์‚ฌ์ „์—๋Š” N๊ฐ€์ง€ ๋‹จ์–ด๊ฐ€ ์ ํ˜€ ์žˆ๋‹ค. ๋ชจ๋“  ๋‹จ์–ด๋Š” ์†Œ๋ฌธ์ž์ด๋‹ค. ๋‹จ์–ด ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์•ŒํŒŒ๋ฒณ์„ ์•Œ ๋•Œ, ๊ทธ ๋‹จ์–ด๋ฅผ ์™„์ „ํžˆ ์•ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋“ค์ด ์ฃผ

www.acmicpc.net

์ค€์„์ด๋Š” ์˜์–ด ๋‹จ์–ด๋ฅผ ์™ธ์šฐ๋ ค๊ณ  ํ•œ๋‹ค. ์‚ฌ์ „์—๋Š” N๊ฐ€์ง€ ๋‹จ์–ด๊ฐ€ ์ ํ˜€ ์žˆ๋‹ค. ๋ชจ๋“  ๋‹จ์–ด๋Š” ์†Œ๋ฌธ์ž์ด๋‹ค. ๋‹จ์–ด ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์•ŒํŒŒ๋ฒณ์„ ์•Œ ๋•Œ, ๊ทธ ๋‹จ์–ด๋ฅผ ์™„์ „ํžˆ ์•ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋“ค์ด ์ฃผ์–ด์ง„๋‹ค.

  • 1 x : ์•ŒํŒŒ๋ฒณ x๋ฅผ ์žŠ๋Š”๋‹ค.
  • 2 x : ์•ŒํŒŒ๋ฒณ x๋ฅผ ๊ธฐ์–ตํ•ด ๋‚ธ๋‹ค.

์ฒ˜์Œ์— ๋ชจ๋“  ์•ŒํŒŒ๋ฒณ์„ ๊ธฐ์–ตํ•˜๋Š” ์ƒํƒœ๊ณ , ๋ชจ์Œ์€ ์™„๋ฒฝํ•˜๊ฒŒ ์™ธ์› ๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€ ์žŠ์ง€ ์•Š๋Š”๋‹ค.
๊ฐ ์ฟผ๋ฆฌ๋งˆ๋‹ค ์™„์ „ํžˆ ์•Œ๊ณ  ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.

ํ’€์ด

๊ธธ์ด 26์งœ๋ฆฌ ๋น„ํŠธ๋งต์„ ์ด์šฉํ•ด์„œ ํ’€์ดํ–ˆ๋‹ค. (์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜๊ฐ€ 26์ด๊ธฐ ๋•Œ๋ฌธ)
์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ์•ŒํŒŒ๋ฒณ์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ „๋ถ€ 1๋กœ ์„ค์ •ํ•˜๊ณ 
ํŠน์ • ์•ŒํŒŒ๋ฒณ์„ ์žŠ์„ ๋•Œ๋Š”, ํ•ด๋‹น ์ž๋ฆฌ์˜ ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ 
๋‹ค์‹œ ๊ธฐ์–ตํ•  ๋•Œ๋Š”, ํ•ด๋‹น ์ž๋ฆฌ์˜ ๋น„ํŠธ๋ฅผ 1๋กœ ๋ฐ”๊พธ์–ด์ฃผ์—ˆ๋‹ค.
(a=0, b=1๋ฒˆ ์งธ ์ž๋ฆฌ ๋น„ํŠธ)

๊ธฐ์–ตํ•˜๋Š” ์—ฐ์‚ฐ (1๋กœ ๋ฐ”๊พธ๋Š” ์—ฐ์‚ฐ)์€ or๋กœ ํŽธํ•˜๊ฒŒ ํ–ˆ๋Š”๋ฐ,
์žŠ์–ด๋ฒ„๋ฆฌ๋Š” ์—ฐ์‚ฐ (0์œผ๋กœ ๋ฐ”๊พธ๋Š” ์—ฐ์‚ฐ)์€ ํ•œ์ค„์— ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ if๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž๋ฆฌ ๋น„ํŠธ๊ฐ€ 1์ด๋ฉด, ํ•ด๋‹น ์ˆ˜๋ฅผ ๋นผ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณ„์‚ฐํ–ˆ๋‹ค.

N๊ฐœ์˜ ๋‹จ์–ด๋“ค์€ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ๋น„ํŠธ๋งต์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ €์žฅํ•˜๊ณ ,
๊ทธ๋ฆฌ๊ณ  ๋งค๋ฒˆ ์ฟผ๋ฆฌ๋งˆ๋‹ค N๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•ด์„œ ํ•ด๋‹น ์ฟผ๋ฆฌ์— ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์ฃผ์—ˆ๋‹ค.

[์˜๋ฌธ์ ]
๋‹ค ํ’€๊ณ  ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ๋ณด๋‹ˆ, ๋ชจ์Œ์€ ์ ˆ๋Œ€๋กœ ์žŠ์ง€ ์•Š๋Š”๋‹ค๋Š” ์กฐ๊ฑด์ด ์žˆ์—ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์ง€ ์•Š์•˜๋Š”๋ฐ ์ •๋‹ต์ด ๋‚˜์˜จ๊ฑธ ๋ณด๋‹ˆ, ์•„์˜ˆ ๋ชจ์Œ์„ ์žŠ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์— ์•ˆ๋“ค์–ด์˜ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ฝ”๋“œ

#include <iostream>
#include <string>

using namespace std;

int bitmap = (1 << 27)-1;
int N, M;
int bitmaps[10001];
int main() {
	scanf("%d %d", &N, &M);
	string word;
	for (int n = 0;n < N;n++) {
		cin >> word;
		int bm = 0;
		for (int i = 0;i < word.size();i++) {
			int temp = word[i]-'a';
			bm = bm | (1 << temp);
		}
		bitmaps[n] = bm;
	}
	char x; int o;
	for (int m = 0;m < M;m++) {
		scanf("%d %c", &o, &x);
		int idx = x - 'a';
		int temp = (1 << idx);
		if (o == 1) { // x ์žŠ๊ธฐ 
			if ((bitmap & temp) == temp) {
				bitmap -= temp;
			}
		}
		else if (o == 2) { // x ๊ธฐ์–ตํ•˜๊ธฐ
			bitmap = bitmap | temp;
		}
		// ๋‹จ์–ด์ค‘์— ๋ช‡ ๊ฐœ ๊ธฐ์–ตํ•˜๋Š”์ง€ 
		int cnt = 0;
		for (int n = 0;n < N;n++) {
			int res = bitmap & bitmaps[n]; 
			if (res == bitmaps[n])
				cnt++;
		}
		printf("%d\n", cnt);
	}
	return 0;
}

๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•