티스토리 뷰

Baekjoon Solutions/Class-3

[백준] 집합(11723)

률무차 2021. 3. 30. 21:57

title: "집합(11723)"
category: 백준[Class-3]
tags: [C++, JavaScript, 백준]
date: "2021-03-30"


문제 링크

집합(11723)

C++

#include <iostream>
#include <vector>

using namespace std;

// 문제 풀이 함수
void solution(){
    int m;
    cin >> m;

    string log = "";
    int bitSet=0;
    for(int i=0; i<=m; i++){
        string op;
        int num;

        cin >> op;
        if(op == "add"){
            cin >> num;
            bitSet |= 1<<(num-1);
        }
        else if(op == "remove"){
            cin >> num;
            bitSet &= ~(1<<(num-1));    // '~' 반전
        }
        else if(op == "check"){
            cin >> num;
            if(bitSet&(1<<(num-1)))
                cout<<"1\n";
            else
                cout<<"0\n";
        }
        else if(op == "toggle"){
            cin >> num;
            bitSet ^= 1<<(num-1);   // XOR
        }
        else if(op == "all"){
            bitSet |= (1<<21)-1;
        }
        else if(op == "empty"){
            bitSet = 0;
        }
    }
}

bool exists(const char* fileName){
    FILE* fp;
    if((fp = fopen(fileName, "r"))){
        fclose(fp);
        return true;
    }
    return false;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    if(exists("stdin")){
        freopen("stdin", "r", stdin);
        solution();
        fclose(stdin);
    }
    else{
        solution();
    }

    return 0;
}

JavsScript

  • C++과 동일한 로직이지만 한꺼번에 Input을 읽어 메모리 초과가 난다.
    • 따로 메모리를 늘려주지 않는 이상은 통과는 힘들듯 하다.
const fs = require("fs");
const input = fs.readFileSync("dev/stdin").toString().trim().split("\n");

// 문제 풀이
const m = +input[0];

let bits = 0;
for (let i = 1; i <= m; i++) {
  const cmd = input[i].split(" ");
  const op = cmd[0];
  switch (op) {
    case "add":
      bits |= 1 << (+cmd[1] - 1);
      break;
    case "remove":
      bits &= ~(1 << (+cmd[1] - 1));
      break;
    case "check":
      if (bits & (1 << (+cmd[1] - 1))) console.log(1);
      else console.log(0);
      break;
    case "toggle":
      bits ^= 1 << (+cmd[1] - 1);
      break;
    case "all":
      bits |= (1 << 21) - 1;
      break;
    case "empty":
      bits = 0;
      break;
  }
}
728x90
반응형
댓글
05-16 07:27
링크