728x90
반응형
https://www.acmicpc.net/problem/11723
집합문제는 풀이를 했을때 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, 0, sizeof(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 |
댓글