Notice
Recent Posts
Recent Comments
Link
승코딩당당당
[C++] 백준 11723: 집합 본문
문제
[C++] 백준 11723: 집합 SILVER 5
https://www.acmicpc.net/problem/11723

접근 방법
이 문제는 1부터 20까지의 숫자로 이루어진 집합 S에 대해 여러 가지 연산을 수행하는 문제이다.
집합의 크기가 최대 20으로 고정되어 있으므로,
각 원소의 존재 여부를 bool 배열로 관리하면 간단하게 처리할 수 있다.
명령어에 따라 다음과 같이 동작한다.
- add x : x를 집합에 추가 → true
- remove x : x를 집합에서 제거 → false
- check x : x가 있으면(true) 1, 없으면(false) 0 출력
- toggle x : x가 있으면 제거, 없으면 추가
- all : 1부터 20까지 모두 포함 → 모두 true
- empty : 집합을 비움 → 모두 false
문자열로 명령어를 입력받아,
조건문을 통해 각각의 연산을 수행하도록 구현했다.
구현 시 주의할 점
- all과 empty 명령어는 숫자 입력이 없기 때문에, 숫자를 입력받는 부분에서 반드시 제외해야 한다.
- 따라서 아래 조건문은 ||가 아닌 &&를 사용해야 올바르게 동작한다.
if (cal != "all" && cal != "empty")
cin >> x;
코드
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<bool> S(21, 0);
int m = 0;
cin >> m;
string cal = "";
int x = 0;
for (int i = 0; i < m; i++)
{
cin >> cal;
if (cal != "all" && cal != "empty")
cin >> x;
if (cal == "add")
S[x] = true;
else if (cal == "remove")
S[x] = false;
else if (cal == "check")
{
if (S[x] == true)
cout << 1 << '\n';
else
cout << 0 << '\n';
}
else if (cal == "toggle")
{
if (S[x] == false)
S[x] = true;
else
S[x] = false;
}
else if (cal == "all")
fill(S.begin(), S.end(), true);
else
fill(S.begin(), S.end(), false);
}
return 0;
}'PS > BOJ' 카테고리의 다른 글
| [C++] 백준 10431: 줄세우기 (0) | 2025.12.31 |
|---|---|
| [C++] 백준 9655: 돌 게임 (0) | 2025.12.30 |
| [C++] 백준 2816: 디지털 티비 (1) | 2025.12.29 |
| [C++] 백준 1157: 단어 공부 (0) | 2025.12.29 |
| [C++] 백준 1927: 최소 힙 (0) | 2025.12.29 |