터보모드(TURBOMODE) 정답 코드
뿌리튼튼 CS/Algorithm2015. 4. 10. 18:52
난이도 ★☆☆☆☆
문제
N(1~1000)개의 Process 를 돌릴 수 있으며, 동시에 최대 100개의 Process 를 실행할 수 있다.
1~1000초 사이 동안 5개의 Process 가 실행되는 시간이 아래 그림과 같다면
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | … | 996 | 997 | 998 | 999 | 1000 |
Turbo mode 로 실행되는 Process의 개수를 출력하시오. (단, Turbo mode 는 Process 가 연속으로 3초 이상 실행되면 동작하며, 입력은 Process 의 시작 시간을 기준으로 오름차순으로 주어진다)
입력
5 → 입력할 Process 의 개수
1 3
4 6
6 8
12 16
13 15
출력
2
힌트
Greedy로 Process를 한번씩만 탐색하면 끝난다. O(n) → ① Process 하나를 먼저 입력받고 시작시간과 종료시간을 저장한다. → ② Process를 하나씩 입력받으면서, 시작시간이 기존 Process의 종료시간보다 이르면 합치고 → ③ 늦으면 기존 Process를 새걸로 덮어쓴다. 이때 기존 Process의 지속시간이 3초 보다 길었다면 count++ 해준다. |
이하는 코드입니다.
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 44 45 | #include <stdio.h> #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #pragma warning(disable:4996) typedef struct { int start; int end; } P; // Process int main() { int sizeOfP; scanf("%d\n", &sizeOfP); int count = 0; P oldP; scanf("%d %d", &oldP.start, &oldP.end); sizeOfP--; while (sizeOfP-- > 0) { P newP; scanf("%d %d", &newP.start, &newP.end); if (newP.start <= oldP.end) { oldP.end = MAX(oldP.end, newP.end); } else { if ((oldP.end - oldP.start) >= 3) { count++; } oldP.start = newP.start; oldP.end = newP.end; } } if ((oldP.end - oldP.start) >= 3) { count++; } printf("%d\n", count); return 0; } | cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
Endians(ENDIANS) 정답 코드 (0) | 2015.10.09 |
---|---|
Mispelling(MISPELL) 정답 코드 (0) | 2015.04.10 |
HOTSUMMER 정답 코드 (0) | 2015.04.10 |
게임판 덮기(BOARDCOVER) 정답 코드 (0) | 2015.02.28 |
콘서트(CONCERT) 정답 코드 (1) | 2015.02.26 |