본문 바로가기

SWEA/삼성SW역량테스트 C++

[모의 SW 역량테스트] 차량 정비소

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV6c6bgaIuoDFAXy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

풀이

* 시간 0부터 들어온 고객을 접수 창구에 배정한다. 이 때, 접수 창구가 꽉 차서 배정되지 못한 고객은 대기 배열에 넣는다. (waitA)

* USER <= idx(고객 번호) / rec(배정된 접수 창구 번호) / rep (배정된 정비 창구 번호) / time(경과된 시간) / wait(접수를 마치고 대기한 시간) 

* 큐를 두 개 사용한다. (접수 : aq / 정비 : bq) 

 

* bfs()의 flow 

1) inputWaitingA() : 접수 대기열에 있는 사람들을 접수 창구에 넣음 / 지금 들어온 사람들을 접수 대기열에 넣는다. 

2) 접수 창구 처리 => 완료하면 정비 창구 대기열에 넣는다. 

3) inputWaitingB() : 정비 창구 대기열에 잇는 사람들을 정비 창구에 넣는다. 

*** 정비 창구가 꽉 차서 들어가지 못한 사람들은 wait를 1씩 증가시켜준다. (wait가 클 수록 더 빨리 창구에 배치시키고, 만약 wait가 같다면 접수 창구 번호가 적은 순으로 배치한다.)

① 먼저 기다리는 고객이 우선한다.

② 두 명 이상의 고객들이 접수 창구에서 동시에 접수를 완료하고 정비 창구로 이동한 경우, 이용했던 접수 창구번호가 작은 고객이 우선한다.

③ 빈 창구가 여러 곳인 경우 정비 창구번호가 작은 곳으로 간다.

 

 

* 접수 창구 번호가 a / 정비 창구 번호가 b인 사람들의 고객번호를 더한다.