백준

백준 11723 - 집합 (얌체 풀이)

황태건 2023. 7. 14. 14:58

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

 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

비트마스킹을 모른 채로 푼 결과

간단한 구현 문제

void operation(string op) {
    if (op == "empty")
        for (int i = 1; i <= v.size(); i++) v[i] = 0;
    else if (op == "all")
        for (int i = 1; i <= v.size(); i++) v[i] = 1;
    else {
        int x;
        cin >> x;
        if (op == "add")
            v[x] = 1;
        else if (op == "remove")
            v[x] = 0;
        else if (op == "check")
            cout << v[x] << '\n';
        else
            v[x] = !v[x];
    }
}

이 쉬운 문제를 왜 틀렸지? 하는 사람들은 나처럼 헛수고하지 말고

배열을 call by value로 가져오지는 않았는지 확인해보자

 

여러 개의 분기가 존재하는 조건문은 switch문을 사용하면 편리하지만, 아쉽게도 switch는 정수형 변수에만 사용 가능하다. 즉 위와 같은 문자열 분기는 사용할 수 없다.

 

굳이 위 문제에 switch를 적용하려면

1) 위 문제의 각 명령은 맨 앞 문자가 서로 다르므로 op[0]을 기준으로 구별하거나,

2) map을 이용해 각 명령을 key로 하는 별개의 value들을 추가하면 되겠다.

 

배운 내용

switch문과 해쉬 함수

흔히 하는 실수 -> 배열 call by value

'백준' 카테고리의 다른 글

백준 11723 - 집합  (0) 2023.07.14
백준 7662 - 이중 우선순위 큐  (0) 2023.07.14
백준 14940 - 쉬운 최단거리  (0) 2023.07.13
백준 18870 - 좌표 압축  (0) 2023.07.11
백준 7576 - 토마토  (0) 2023.07.06