https://www.acmicpc.net/problem/16396
선분의 시작점과 끝점을 입력으로 받는다.
요것을 그대로 일차원 배열에 넣으면 된다.
예를들어 1 10은 1부터10까지 선분을 말하는데
일차원 1~9까지 각 방을 TRUE로 바꿔주면 된다.
총 길이는 10000을 넘지 않으므로 미리 10000개의 방을 잡아놓고
입력에서 최소 시작점과 최대 끝점을 찾아서
최소 시작점부터 최대 끝점까지 TRUE인 것의 수를 세면 된다.
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 | #include<stdio.h> #define MAX(A,B) (A>B)?A:B #define MIN(A,B) (A<B)?A:B typedef enum _BOOL { TRUE = 1, FALSE = 0 }BOOL; int main() { int n; int p, q; int first = 10000,last = 0; int length = 0; BOOL A[10000] = {FALSE}; scanf("%d",&n); for (int i = 0; i < n;i++) { scanf("%d %d",&p,&q); for (int j = p; j < q;j++) { A[j] = TRUE; } first = MIN(first,p); last = MAX(last,q); } for (int i = first; i < last;i++) { if (A[i]) length++; } printf("%d\n",length); return 0; } | cs |
'백준' 카테고리의 다른 글
10757)큰 수 A+B (0) | 2019.02.19 |
---|---|
15501)부당한 퍼즐 (0) | 2019.02.18 |
14891)톱니바퀴 (0) | 2019.02.16 |
2583)영역 구하기 (0) | 2019.02.16 |
10158)개미 (0) | 2019.02.14 |