집합
문제설명
첫 줄에 명령의 수를 입력 받고, 위의 사진대로 명령이 수행되도록 구현한다.
알고리즘
- 입력할 명령어의 수를 입력 받는다.
- 각 명령어 별로 확인을 하고 알맞은 수행을 한다.
- 시간 절약을 위해서 직접 값을 찾지 않고, 값의 범위가 1~20이므로 배열에 존재하면 1, 그렇지 않으면 0으로 표기하여 수행한다.
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int main(void)
{
int N;
cin >> N;
int v[21] = { 0, };
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
while (N)//회의실 정보 입력받기
{
string s;
cin >> s;
int num;
if (s == "add")
{
cin >> num;
if (v[num] == 0)//없으면 추가
v[num] = 1;
}
if (s == "remove")
{
cin >> num;
if (v[num]==1)//있으면 지우기
v[num] = 0;
}
if (s == "check")
{
cin >> num;
if (v[num] == 1)//있으면 1출력
cout << 1 << "\n";
else //없으면 0출력
cout << 0 << "\n";
}
if (s == "toggle")
{
cin >> num;
if (v[num] == 1)//있으면 제거
v[num] = 0;
else //없으면 추가
v[num] = 1;
}
if (s == "all")//1~20까지 전부1로
{
for (int i = 0; i < 21; i++)
v[i] = 1;
}
if (s == "empty")//1~20까지 전부 0으로
{
for (int i = 0; i < 21; i++)
v[i] = 0;
}
N--;
}
return 0;
}
고찰
이번 문제는 처음에 vector를 이용하고 find함수를 이용하여 값을 찾아서 만드는 문제인줄 알았다.
하지만 시간제약이 있고 값의 범위도 한정되어 있어서 그렇게 풀면 안된다.
시간 절약을 위해서 1~20까지의 배열을 만들고 그 값이 있으면 1로, 없으면 0으로 만든다.
index를 활용하여 빠르게 접근하여 시간을 줄이고, cin으로 입력 받을 때 또한 시간을 줄일 필요가 있었다.
'Algorithm' 카테고리의 다른 글
[백준 11399] ATM (0) | 2021.07.29 |
---|---|
[백준 11726] 2xN 타일링 (0) | 2021.07.29 |
[백준 1931] 회의실 배정 (0) | 2021.07.29 |
[백준 1541] 잃어버린 괄호 (0) | 2021.07.29 |
[백준 1181] 단어 정렬 (0) | 2021.07.29 |