c++

백준 c++ 11723 문제 풀이

psb08 2025. 4. 6. 03:01
728x90

문제 링크 : https://www.acmicpc.net/problem/11723

목차

1. 설명

 

2. 내 코드

 

3. 문제 풀이 해석 내용

 

4. 실행 결과

 

설명

백준 실버 5 문제 입니다.

문제명 : 집합

 

내 코드

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() 
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int M;
    cin >> M;

    vector<bool> S(21, false); 

    string command;
    int x;

    while (M--) 
    {
        cin >> command;

        if (command == "add") 
        {
            cin >> x;
            S[x] = true;
        }
        else if (command == "remove") 
        {
            cin >> x;
            S[x] = false;
        }
        else if (command == "check") 
        {
            cin >> x;
            cout << (S[x] ? 1 : 0) << '\n';
        }
        else if (command == "toggle") 
        {
            cin >> x;
            S[x] = !S[x];
        }
        else if (command == "all") 
        {
            fill(S.begin() + 1, S.end(), true);
        }
        else if (command == "empty") 
        {
            fill(S.begin() + 1, S.end(), false);
        }
    }

}

 

문제 풀이 해석 내용

 

입출력 최적화

ios::sync_with_stdio(false);
cin.tie(nullptr);

입출력을 더 빠르게 하기 위해 C++의 동기화를 비활성화합니다

 

 

변수 선언 및 초기화

int M;
cin >> M;
vector<bool> S(21, false);

M: 명령의 개수를 저장할 변수입니다.
S: 크기 21의 불리언 벡터로, 집합의 원소(1부터 20까지)를 관리합니다. 

초기값은 모두 false로 설정됩니다.

 

 

명령 처리

string command;
int x;

while (M--) 
{
    cin >> command;

command 변수는 현재 명령을 저장하고, x는 명령에 대한 인자를 저장합니다.
while (M--) 루프를 사용하여 M개의 명령을 처리합니다.

 

 

명령어에 따른 집합 조작

if (command == "add") 
{
    cin >> x;
    S[x] = true;
}
else if (command == "remove") 
{
    cin >> x;
    S[x] = false;
}
else if (command == "check") 
{
    cin >> x;
    cout << (S[x] ? 1 : 0) << '\n';
}
else if (command == "toggle") 
{
    cin >> x;
    S[x] = !S[x];
}
else if (command == "all") 
{
    fill(S.begin() + 1, S.end(), true);
}
else if (command == "empty") 
{
    fill(S.begin() + 1, S.end(), false);
}

각 명령에 따라 집합을 조작합니다:
add x: 원소 x를 집합에 추가합니다. S[x]를 true로 설정합니다.
remove x: 원소 x를 집합에서 제거합니다. S[x]를 false로 설정합니다.
check x: 원소 x가 집합에 있으면 1, 없으면 0을 출력합니다.
toggle x: 원소 x가 집합에 있으면 제거하고, 없으면 추가합니다. S[x]의 값을 반전시킵니다.
all: 집합을 {1, 2, ..., 20}으로 설정합니다. fill 함수를 사용하여 S[1]부터 S[20]까지 true로 설정합니다.
empty: 집합을 비웁니다. fill 함수를 사용하여 S[1]부터 S[20]까지 false로 설정합니다.

 

 

실행 결과

 

728x90

'c++' 카테고리의 다른 글

백준 c++ 18870 문제 풀이  (0) 2025.04.08
백준 c++ 1152 문제 풀이  (0) 2025.04.07
백준 c++ 2476 문제 풀이  (0) 2025.04.05
백준 c++ 2562 문제 풀이  (0) 2025.04.04
백준 c++ 2738 문제 풀이  (0) 2025.04.03