Home > Algorithm > BOJ > [BOJ] 11723๋ฒˆ ์ง‘ํ•ฉ

[BOJ] 11723๋ฒˆ ์ง‘ํ•ฉ
C++ ๋ฐฑ์ค€ BOJ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Algorithm

๐Ÿ”— ๋ฌธ์ œ

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


๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

๋น„์–ด์žˆ๋Š” ๊ณต์ง‘ํ•ฉ S๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
add x: S์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (1 โ‰ค x โ‰ค 20) S์— x๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์—ฐ์‚ฐ์„ ๋ฌด์‹œํ•œ๋‹ค.
remove x: S์—์„œ x๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. (1 โ‰ค x โ‰ค 20) S์— x๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์—ฐ์‚ฐ์„ ๋ฌด์‹œํ•œ๋‹ค.
check x: S์— x๊ฐ€ ์žˆ์œผ๋ฉด 1์„, ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค. (1 โ‰ค x โ‰ค 20)
toggle x: S์— x๊ฐ€ ์žˆ์œผ๋ฉด x๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์—†์œผ๋ฉด x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (1 โ‰ค x โ‰ค 20)
all: S๋ฅผ {1, 2, โ€ฆ, 20} ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
empty: S๋ฅผ ๊ณต์ง‘ํ•ฉ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

์ž…๋ ฅ: ์ฒซ์งธ ์ค„์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์—ฐ์‚ฐ์˜ ์ˆ˜ M (1 โ‰ค M โ‰ค 3,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์—ฐ์‚ฐ์ด ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค.
์ถœ๋ ฅ: check ์—ฐ์‚ฐ์ด ์ฃผ์–ด์งˆ๋•Œ๋งˆ๋‹ค, ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ’ก ์ ‘๊ทผ ๋ฐฉ๋ฒ•

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ž‘๊ฒŒ ๊ฑธ๋ ค ์žˆ๊ธฐ์— ์–ด๋–ป๊ฒŒ ํ’€์–ด๋‚˜๊ฐ€์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค.
์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๋ฉด์„œ ์‹œ๊ฐ„์—๋„ ๊ฑธ๋ฆฌ์ง€ ์•Š์œผ๋ ค๋ฉด set ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ์•Œ๊ฒŒ๋œ ์‚ฌ์‹ค์€ set๊ณผ unordered_set์˜ insert, erase ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋๋‹ค.
set์„ unordered_set์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ง„ํ–‰ ํ–ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ํ’€๊ฒŒ๋œ ๋ฌธ์ œ์ธ๋ฐ
๋‹ค๋ฅธ ํ•ด๋‹ต์„ ๋ณด๋‹ˆ ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ํ™œ์šฉํ•ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์ด ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค.


โš ๏ธ ์ฒ˜์Œ์— ํ–ˆ๋˜ ์‹ค์ˆ˜


๐Ÿ’ป ์ฝ”๋“œ

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int M;
unordered_set<int> S;
string command;
int value;
void commandStr() {
  bool isContained = S.find(value) != S.end();
  if (command == "add" && !isContained)
    S.emplace(value);
  else if (command == "remove" && isContained)
    S.erase(value);
  else if (command == "check") {
    if (isContained)
      cout << '1' << '\n';
    else
      cout << '0' << '\n';
  } else if (command == "toggle") {
    if (isContained)
      S.erase(value);
    else
      S.emplace(value);
  }
}
void commandAll() {
  S = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
}
void commandEmpty() { S = {}; }

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> M;

  for (int i = 0; i < M; ++i) {
    cin >> command;
    if (command == "all") {
      commandAll();
    } else if (command == "empty") {
      commandEmpty();
    } else {
      cin >> value;
      commandStr();
    }
  }

  return 0;
}