반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 기술면접
- Docker
- 처우협의
- incr
- 6987
- Kafka
- 퇴사통보
- 물채우기
- softeer
- 처우산정
- dfs
- OFFSET
- msSQL
- 백트래킹
- @P0
- 파라메트릭
- BOJ
- 성적평가
- 13908
- 경력
- 오퍼레터
- BFS
- 소프티어
- compose
- boj #19237 #어른 상어
- 이분탐색
- upper_bound
- 백준
- 매개변수탐색
- 연결요소
Archives
- Today
- Total
기술 블로그
2477번 차량 정비소 본문
728x90
반응형
문제 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV6c6bgaIuoDFAXy
엄청 어려웠다.
이와 같은 유형(http://hsdevelopment.tistory.com/27)을 잘 못 풀겠다.
시간에 따라 어디를 이용하는 유형..
다른 분의 코드를 참고하였다.
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | #include <iostream> #include <queue> #include <cstdio> #include <vector> #include <cstring> #include <string> #include <math.h> #include <algorithm> using namespace std; int N = 0, M = 0, K = 0, A = 0, B = 0; int a[10] = { 0, }; // 접수 창구가 고장을 접수하는 데 걸리는 시간 int a_time[10] = { 0, }; // 위와 같다 int b[10] = { 0, }; // 정비 창구가 차량을 정비하는 데 걸리는 시가 int b_time[10] = { 0, }; // 위와 같다 int arrive[1003] = { 0, }; // 고객이 차량 정비소를 방문하는 시간 int a_use[10] = { 0, }; // a_use[i] = i번 째 접수 창구를 이용하는 고객 번호 int b_use[10] = { 0, }; // b_use[i] = i번 째 정비 창구를 이용하는 고객 번호 bool check[1003] = { false, }; int result = 0; queue<int> a_waiting; // 정수 창구로 가기 위한 대기열 queue<int> b_waiting; // 정비 창구로 가기 위한 대기열 void findNumber(int time, int cnt) { if (cnt == K) return; // 완료 // 시간 순서로 접수 창구로 가기 위한 대기열에 배치 for (int i = 1; i <= K; i++) { if (time == arrive[i]) a_waiting.push(i); else if (time < arrive[i]) break; } // 접수 창구 배정 for (int i = 1; i <= N; i++) { if (a_waiting.empty()) break; if (a_use[i] == -1) // i 번 째 접수 창구를 이용하는 사람이 없다면 { if (i == A) check[a_waiting.front()] = true; a_use[i] = a_waiting.front(); a_waiting.pop(); } } // 정비 창구 배정 for (int i = 1; i <= M; i++) { if (b_waiting.empty()) break; if (b_use[i] == -1) // i 번 째 정비 창구를 이용하는 사람이 없다면 { if (i == B && check[b_waiting.front()]) result += b_waiting.front(); // not result += i; b_use[i] = b_waiting.front(); b_waiting.pop(); ++cnt; // 접수 창구 코드에 쓰면 안 된다. // 37번 째 코드 때문에 원하는 타이밍보다 더 빨리 탈출해버리기 때문이다 } } // 1초 경과 : 접수 창구 for (int i = 1; i <= N; i++) { if (a_use[i] != -1) { --a_time[i]; // 1초 감소 if (a_time[i] == 0) { a_time[i] = a[i]; b_waiting.push(a_use[i]); // 접수 창구에서의 시간이 끝났으므로, 정비 창구 대기열로 배치 a_use[i] = -1; } } } // 1초 경과 : 정비 창구 for (int i = 1; i <= M; i++) { if (b_use[i] != -1) { --b_time[i]; if (b_time[i] == 0) { b_time[i] = b[i]; b_use[i] = -1; } } } findNumber(time + 1, cnt); return; } void init() // 초기화 { result = 0; while (!a_waiting.empty()) { a_waiting.pop(); } while (!b_waiting.empty()) { b_waiting.pop(); } memset(a_use, -1, sizeof(a_use)); memset(b_use, -1, sizeof(b_use)); memset(check, false, sizeof(check)); } int main(void) { int T = 0; // 테스트 케이스 scanf("%d", &T); for (int tc = 1; tc <= T; tc++) { init(); scanf("%d %d %d %d %d", &N, &M, &K, &A, &B); for (int i = 1; i <= N; i++) { // 접수 창구 scanf("%d", &a[i]); a_time[i] = a[i]; } for (int i = 1; i <= M; i++) { // 정비 창구 scanf("%d", &b[i]); b_time[i] = b[i]; } for (int i = 1; i <= K; i++) { // i번 째 고객이 도착한 시간 scanf("%d", &arrive[i]); } findNumber(0, 0); printf("#%d %d\n", tc, result != 0 ? result : -1); } return 0; } | cs |
728x90
반응형
'알고리즘 문제 > SW Expert Academy' 카테고리의 다른 글
1767번 프로세서 연결하기 (0) | 2019.04.14 |
---|---|
5653번 줄기세포 배양 (2) | 2018.10.05 |
2117번 홈 방범 서비스 (0) | 2018.09.01 |
2105번 디저트 카페 (0) | 2018.08.31 |
2382번 미생물 격리 (0) | 2018.08.29 |