title: "[프로그래머스] GPS C++ 해설 (Level 3) - 이도훈"
cleanUrl: "programmers/1837"
description: "프로그래머스 Level 3 문제 [GPS]의 풀이를 정리합니다."
카카오 택시 개발자 Jay-G는 다음 업데이트를 준비하기 위해 개선사항을 위한 여러 피드백을 받았다. 그중에서 손님이 자주 탑승하는 위치를 추천해주었으면 한다는 의견이 많았다.
다음 업데이트 준비를 위해 Jay-G는 택시의 승하차 및 이동 경로를 수집하여 분석하기 시작하였다. 데이터를 분석하던 Jay-G는 몇 가지 특이사항을 발견했다. 택시의 이동 경로를 GPS를 통해 수집하게 되는데, GPS 신호 불량, 통신 오류 등 다양한 원인으로 위치의 오류가 발생한 것을 알게 되었다. 다만 승차 위치와 하차 위치는 오류가 없는 것으로 확인이 되었다.
개발자 Jay-G는 수집한 이동 경로의 오류를 최소한으로 수정하여 좀 더 정확한 이동 경로를 구하고 싶어 한다.
택시는 다음과 같은 조건으로만 이동한다. 먼저 택시는 거점을 이동해 다니며, 거점 간의 이동은 해당하는 도로가 있는 경우에만 가능하다. 또한, 교통 상황에 따라 택시는 한 거점에 머무를 수 있고, 왔던 길을 되돌아갈 수 있다. 모든 도로는 방향이 별도로 없는 왕복 도로이다.
예를 들어, 위 그래프에서 택시가 다음과 같이 시간대별로 이동 경로를 보내왔다.
t | 위치 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 3 |
5 | 6 |
6 | 7 |
하지만 위의 택시가 보내온 경로에는 거점 3
에서 거점 6
으로 이동할 수 있는 도로가 없으므로 이동 경로에 오류가 있다.
이러한 오류를 최소한으로 수정하여 이동 가능한 경로로 만들고 싶다. 이 경우 1회의 오류를 수정하여 다음과 같이 이동 가능한 경로를 만들 수 있다. 시간 t=4
의 위치를 거점 5
로 한 번 수정하면 이동 가능한 경로가 된다.
t | 위치 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 5 |
5 | 6 |
6 | 7 |
이와 비슷하게 시간 t=4
의 위치를 거점 4
로 바꾸거나, 시간 t=5
위치를 거점 5
로 바꾸면 이동 가능한 경로로 만들 수 있다. 위의 경우 수정한 오류의 개수는 1개이다.
t | 위치 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 6 |
6 | 7 |
t | 위치 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 3 |
5 | 5 |
6 | 7 |
위와 같이 택시가 보내온 경로에서 이동 가능한 경로로 만드는 최소의 오류 수정 횟수를 구하여라.