개요
엘리베이터는 사람을 높은 곳이나 낮은곳, 또는 먼 곳으로 옮긴다. 두 대 이하의 엘리베이터가 설치된 경우엔 해당 엘리베이터는 보통 독립적으로 작동하며, 세 대이상 설치된 경우나 복합주택에 설치된 엘리베이터의 경우엔 여러대의 엘리베이터의 효율성을 높히기 위해 관련 알고리즘을 구현해놓는 경우가 대부분이다. 이러한 엘리베이터들은 효율성을 극대화시키기위한 알고리즘을 만드는게 가장 중요하다. 자본이 없으면 힘든 과정이므로 추상화시켜 다루도록하자. 이 문서는 동적 추상을 위한 수단으로 엘리베이터 추상체를 구현해본다.
목적
엘레베이터가 한 대만 있는 건물도 많지만, 요즘 복합주택이나 높은 건물들은 두 대 이상을 보유하고 있는 경우가 대부분이다. 그 중에 특히 백화점 엘레베이터의 경우엔 한 층에 서로 큰 거리를 두어 엘레베이터가 위치된 곳도 적지않다. 즉유동인구가 많을 수록 많은 엘레베이터가 설치되어있을 확률이 높다고 할 수 있다. 하지만, 엘레베이터가 많다고 무조건적으로 원하는 층에 빨리갈 수 있다는 것은아니다. n차선 도로가 그보다 작은 도로보다 막힐 경우가 많은 것과 같은 원리로 생각해 볼 수 있을 것이다. 이에 대한 방편으로 엘레베이터 중 일부는 홀수층, 짝수층만 운행하거나, 쌍둥이형태의 엘레베이터를 설치하고, 구간을 정해 운행하는 경우도 있다.
설계 예시
엘레베이터는 크게 정지, 운행이라는 두 가지 상태가 존재하고, 정지에 어느 층으로도 움직이지 않는 상태를 포함하여 각각 아래쪽 방향으로, 위쪽 방향으로라는 총 5가지 상태가 존재하게된다. 엘레베이터가 한 대만 존재하는 경우 단순히 위쪽으로 향하는 엘레베이터는 자신보다 높은 층에 있는 승객 중 위쪽으로 향하는 승객을 태우기위해 멈추면 되고, 아래쪽으로 향하는 엘레베이터는 그 반대의 운행을 하면된다. 아래로향하는데 위쪽을 누른 승객은 해당 운행의 엘레베이터를 탈 수 없으며, 아래로향하면서 아래쪽 방향 스위치를 누른 승객들 중 해당 엘레베이터보다 위쪽에 있으면 탈 수 없다. 그 반대도 역시 성립한다. 하지만 엘레베이터가 두 대 이상 존재하는 경우 승객이 좀 더 빨리 엘레베이터를 탈 수 있도록, 연관있는 운행을할 수 있는데, 예를들어 두 개의 엘레베이터가 존재면 하나의 버튼을 눌러도 가장 빨리 도착할 수 있는 엘레베이터를 자동으로 선택해 승객을 태울 수 있다. 지하 1층에 멈춰있는 엘레베이터와 지상 1층에 멈춰있는 엘레베이터가 있고, 어떤 승객이 10층에서 지하 1층에 멈춰있는 엘레베이터의 버튼을 눌러도 가장 가까이 있는 지상 1층에 멈춰있는 엘레베이터가 올라오는 것도 이러한 컨트롤러 덕분에 가능한 것이다.