티스토리 뷰
title: "집합(11723)"
category: 백준[Class-3]
tags: [C++, JavaScript, 백준]
date: "2021-03-30"
문제 링크
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
반응형
'Baekjoon Solutions > Class-3' 카테고리의 다른 글
[백준] 피보나치 함수(1003) (0) | 2021.04.01 |
---|---|
[백준] 비밀번호 찾기(17219) (0) | 2021.04.01 |
[백준] 듣보잡(1764) (0) | 2021.04.01 |
[백준] 나는야 포켓몬 마스터 이다솜(1620) (1) | 2021.04.01 |
[백준] Four Squares(17626) (0) | 2021.04.01 |
댓글