문제
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
비어있는 공집합 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를 공집합으로 바꾼다.
풀이
// 백준 제출용
//const readFileSyncAddress = '/dev/stdin';
// VSC 테스트용
const readFileSyncAddress = 'input.txt';
const fs = require('fs');
const input = fs.readFileSync(readFileSyncAddress).toString().split('\n');
//답안작성
const m = +(input.shift());
const arr = [];
let S = 0;
let answer = '';
for(let i = 0; i < m; i++){
arr.push(input[i].replace(/\n/g, "").split(' '));
if(!isNaN(arr[i][1])) arr[i][1] = +arr[i][1];
//n값이 undefined일 때 코드 동작 X, 임의로 넣었다.
if(arr[i].length === 1) arr[i].push(0);
let cmd = arr[i][0];
let n = arr[i][1];
bitOperator(cmd,n);
//console.log(i,cmd,n,S.toString(2));
}
function bitOperator(cmd,n){
switch(cmd){
case 'check' :
if(S&(1<<n)) answer += `1\n`;
else answer += `0\n`;
break;
case 'add' :
S |= (1<<n);
break;
case 'remove' :
S &= ~(1<<n);
break;
case 'toggle' :
S ^= (1<<n);
break;
case 'all' :
S = (1<<21)-1;
break;
case 'empty' :
S = 0;
break;
}
}
//제출
console.log(answer);
- 자바스크립트는 메모리 초과로 정답인정이 되지 않는다.
'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글
[알고리즘] 백준 2525번: 오븐 시계 W_node.js (0) | 2022.04.24 |
---|---|
[알고리즘] 백준 2884번: 알람 시계 W_node.js (2) | 2022.04.21 |
[알고리즘] 비트마스크 Bit Mask (0) | 2022.03.20 |
[알고리즘] 백준 9095번: 1, 2, 3 더하기 (완전탐색,재귀) W_node.js (0) | 2022.03.16 |
[알고리즘] 프로그래머스 Lv.1 - 모의고사 (0) | 2022.03.06 |