백준 11723 집합
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

백준 11723 집합

by KyeongMin 2019. 7. 24.
728x90
반응형

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

 

11723번: 집합

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

www.acmicpc.net

집합문제는 풀이를 했을때  27% 정답비율이여서 뭔가 함정이 있는지 생각을 했습니다.

하지만 함정은 없고 그냥 단순 구현문제 였습니다. 

저는 이문제를 풀때 add , remove, check, toggle, all, empty 

이 6개의 명령을 구분을 하기위해서 배열에 1번방에 문자가 다른점을 이용해서 배열의 1번방에 따라 조건을

문제에 제시한대로 구현을 했습니다.

딱히 어려운것은 없었던 문제 였던것 같습니다. 

 

토글 부분에 1이면 0 0이면 1인 부분은 if , else if 문을 이용하면되지만 
한줄로 나타낸다면 
삼항연산자를 이용하면 더 짧아집니다.
모르시는 분이 있을수 있으니 설명드리자면

이렇게 보시면 쉽지 않나요 가끔 문제를 풀때 삼항연사자로 코딩의 길이를 줄여보세요.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<stdio.h>
#include<string.h>
using namespace std;
int main(void) {
    int s[21= { 0, };
    int M = 0;
    int a = 0;
    scanf("%d"&M);
    while (M--) {
        char order[7= { 0, };
        scanf("%s", order);
        if (order[1== 'd') {//add
            
            scanf("%d"&a);
            if (s[a] == 0)s[a] = 1;
        }
        if (order[1== 'e') {//remove
            scanf("%d"&a);
            if (s[a] == 1)s[a] = 0;
        }
        if (order[1== 'h') {//check
            scanf("%d"&a);
            if (s[a] == 1)printf("1\n");
            else printf("0\n");
 
        }
        if (order[1== 'o') {//toggle
            scanf("%d"&a);
            s[a] = s[a] == 1 ? 0 : 1;
 
        }
        if (order[1== 'l') {//all
            for (int i = 1; i <= 20; i++) s[i] = 1;
 
        }
        if (order[1== 'm') {//empty
            memset(s, 0sizeof(s));
        }
 
 
    }
    return 0;
}
 
 

오늘은 여기까지입니다. 감사합니다. 

728x90
반응형

'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글

백준 1941 소문난 칠공주  (0) 2019.07.28
백준 1182 부분수열의 합  (0) 2019.07.24
백준 6603 로또  (0) 2019.07.24
백준 1339 단어 수학  (0) 2019.07.23
백준 1248 맞춰봐  (0) 2019.07.23

댓글