승코딩당당당

[C++] 백준 11723: 집합 본문

PS/BOJ

[C++] 백준 11723: 집합

승코딩당당당 2025. 12. 30. 12:10

문제

[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