삼성전자 20상반기 코테 풀이(2) - 스타트 택시
문제 설명
삼성전자 올 상반기 공채 SW 테스트 문제였던 “스타트 택시” 문제를 풀어보려 한다.
이 문제의 주요 내용은 다음과 같다.
- N x N 크기의 격자에서 각 칸은 비어있거나 벽이 놓여있다. 택시가 빈칸에 있을 때 상하좌우로 인접한 빈칸 중 하나로 이동할 수 있다. 이때 최단경로로만 이동한다.
- 최단 경로인 승객이 여러명인 경우, 행이 작은 승객을, 여러명인 경우 열이 작은 승객을 태움
- M명의 승객은 빈칸에 서있으며 다른 빈칸으로 이동하려 한다.
- 한번에 한 승객만 탑승하고 출발지에서 택시타서 도착지에서 택시에서 내린다.
- 택시에 태울 승객을 선정할때 최단 거리에 있는 승객, 행번호 작은 승객, 열번호 작은 승객의 우선순위를 두고 승객을 선정한다.
- 택시 한칸 이동시마다 연료 1 소모, 한 승객 이동완료하면 승객이동하면서 소모한 연료 2배가 충전되나 이동 도중 연료 소모시 택시 운행 중단한다.
- 모든 승객을 성공적으로 이동시킬 수 있는 경우 최종 남은 연료를, 이동시킬 수 없는 경우 -1을 리턴하라
풀이 방법
- 택시 태울 승객 선정
- BFS로 택시로부터 가장 가까운 승객들 구하고
- 여러명인 경우 행,열번호로 sort 해서 한명 선택.
- 태운승객의 출발지 to 목적지의 최단거리 계산
- BFS로 출발지에서 목적지까지 최단 거리 계산
- 1,2 진행하면서 연료 모두 소진되는 경우 운행 중단.
- 주의사항: 삼성 코테 문제중에서 비교적 난이도가 높은 편, 문제에 여러가지 조건들이 많아서, 잊지말고 모두 고려해줘야함.
- 사용 언어: C++
- 알고리즘: Queue를 이용한 BFS 알고리즘 사용.
댓글남기기