반응형
문제 출처 :
https://www.acmicpc.net/problem/3186
알고리즘 분석 :
문제 해결에 필요한 사항
1. 구현
알고리즘 분류로는 '유한 상태 오토마타'라고 되어있다.
결국 구현이 중요한 문제이다.
arr[i] 값이 1이라면 소변을 보고 있는 중이고, 그것이 k 이상이 되면 소변기는 '사용중'으로 표시시켜준다.
이때 소변기의 물내림 시간은 당연히 0으로 해주어야 한다.(소변을 보는 중이니 물 내림 카운트는 0임이 명백하다.)
만약 arr[i]값이 0이라면 이때 사용중이었다면 flushTime를 ++해준다. 이때 l 이상값이 된다면 소변기를 flush해준다. 그리고 flushTime를 0으로 바꿔주고 useTime또한 0으로 바꿔준다.(소변기에 사람이 없다면 useTime는 0임이 명백하다.)
이때 flush가 한번도 true.가 되지 않았다면 NIKAD이다.
소스 코드 :
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <iostream> #include <cstdio> using namespace std; bool arr[10002]; int main() { int k, l, n; scanf("%d %d %d", &k, &l, &n); for (int i = 1; i <= n; i++) scanf("%1d", &arr[i]); bool use = false; int useTime = 0; bool flush = false; int flushTime = 0; for (int i = 1; i <= n; i++) { if (arr[i]) { useTime++; if (useTime >= k) use = true; flushTime = 0; } else { if (use) { flushTime++; if (flushTime >= l) { printf("%d\n", i); flush = true; use = false; flushTime = 0; } } useTime = 0; } } if (use) { printf("%d\n", l + n - flushTime); flush = true; } if (!flush) printf("NIKAD\n"); return 0; }ntf("%d\n", maxVal); printf("%d\n", minVal); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[14891번] 톱니바퀴 (0) | 2017.11.09 |
---|---|
[5558번] 치~즈 (0) | 2017.10.25 |
[14888번] 연산자 끼워넣기 (0) | 2017.10.25 |
[14729번] 칠무해 (0) | 2017.10.11 |
[1485번] 정사각형 (0) | 2017.10.11 |