Notice
Recent Posts
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
관리 메뉴

이우의 개발일지

[백준/C++] 11723번 집합 - (1) (배열 사이즈, deque 사이즈 변동) 본문

Coding

[백준/C++] 11723번 집합 - (1) (배열 사이즈, deque 사이즈 변동)

공대이우 2024. 5. 20. 23:02

백준 11723번 집합

https://www.acmicpc.net/problem/11723

 

이 문제를 쉽게 생각하고 접근했다면, 낭패를 봤을 것이다.

단순히 add, remove, check, toggle, all, empty 함수를 구현하는게 아닌 만약 그게 존재한다면 추가를 안하는 식의 조건이 붙는다.

 

 문제 1. 배열 사이즈 사용 X -   (1 ≤ x ≤ 20이라는 조건 

문제 조건 중 숫자의 크기는 20이하라는 조건이 주어졌다. 이를 무시하고 단순히 deque로 구현을 할려다보니 만약 수를 빼야되면, 그 수를 앞으로 보내질때까지 pop을 하는 방법을 썼다. (난이도 4배쯤 상승..)

 

문제 2. deque 사이즈 변동

저번 글에서도 똑같은 실수를 했는데 deque, queue, stack 등의 사이즈를 for문 조건을 걸어놓고 push, pop을 해주면 크기가 달라진다는 점이다 ㅠㅠ 이를 간과하고 했다간 디버깅하는데 시간이 굉장히 오래걸린다... ㅋㅋ

 

 

#include <iostream>
#include <cstring>
 
using namespace std;
 
 
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    string str = "";
    int M, x;
    int arr[21] = {0};
    
    
    cin >> M;
    for(int i = 0; i<M; i++){
        cin >> str;
        
        if(str=="add"){
            cin >> x;
            if(arr[x]==0){   //없으면
                arr[x] = 1;
            }
        }
        
        else if(str=="remove"){
            cin >> x;
            if(arr[x] == 1){  //있으면
                arr[x] = 0;
            }
            
        }
        else if(str=="check"){
            cin >> x;
            if(arr[x] == 0){   //없으면
                cout << "0\n";
            } else{
                cout << "1\n";
            }
        }
        else if(str=="toggle"){
           cin >> x;
            if(arr[x] == 1){  //있으면
                arr[x] = 0;
            } else{
                arr[x] = 1;
            }
        }
        else if(str=="all"){
            
            for(int k = 1; k<=20; k++){ arr[k] = 1;}
            
        }
        else if(str=="empty"){
            memset(arr, 0, sizeof(arr));
        }
    }
    
    return 0;
}

 

반응형