학교 자료구조 수업 프로젝트 - 경도, 위도, 카테고리 기반 거리 정렬
├──
├── data # 해당 프로젝트에서 다루는 데이터들의 구조를 담고 있습니다.
├── enums # 시설 종류와 지도 범례를 정의하고 있습니다.
├── services # 시설 종류와 지도 범례를 정의하고 있습니다.
├── store # 지도 정보를 저장하기 위한 코드가 담겨있습니다.
├── ColorCode.java # 콘솔에 색깔을 표시하기 위한 색깔코드가 담겨있습니다.
└── MapSort.java # 프로젝트의 메인 코드입니다.
각 장소별 정보 (종류, 위도, 경도)를 담고 있는 클래스입니다.
getDistance()
메소드를 통해 다른 장소끼리의 거리를 구할 수 있습니다.
장소별 정보와 함께 거리를 담고 있는 클래스입니다.
distance
변수에 내 위치와의 거리를 담고 있으며 getDistanceToOther()
을 통해 거리를 가져올 수 있습니다.
compareTo()
메소드를 이용해 정렬 시 거리 비교를 할 수 있습니다.
내 위치를 기준으로 거리를 구하는 클래스입니다.
PlaceData
클래스를 통해 만들어진 내 위치가 주어지면, MapInfo에 저장한 시설 정보를 가져와 각각의 거리를 구합니다.
버블 정렬을 이용하여 주어진 거리를 정렬하는 클래스입니다.
모든 시설의 거리를 담은 List<PlaceDistance>
데이터가 주어지면 버블 정렬을 이용하여 정렬합니다.
거리를 지도로 표시하기 위해 전처리 및 출력을 담당하는 클래스입니다.
graph
배열을 만들어 배열 자료구조를 이용하여 지도를 만듭니다.
preprocessGraphData()
메소드를 통해 시설의 거리가 들어오면 가장 가까운 곳을 표시해줍니다.
가장 가까운 곳은 MapType enum에 정의된 것에 따라 표시합니다.
getMark()
메소드를 통해 범례 표시를 위해 지도에 저장한 int 값을 이용하여 사람이 볼 수 있는 값을 가져옵니다.
MapType enum에 정의한 것에 따라 기호를 표기하며 색깔 표시를 위해 ColorCode 클래스를 이용합니다.
static block
을 이용해 처음 클래스가 만들어질 때 시설 정보를 등록합니다.
유저 입력을 받기 위해 UserInput
클래스를 이용합니다.
이 때, enum에 없는 값을 가져오기 위해 시도하면 IllegalArgumentException
오류를 반환합니다.
이를 이용하여 입력에 대한 유효성 검사를 진행합니다.
PlaceData
클래스를 이용해 내 위치를 만듭니다.
Graph
클래스 생성 시 만든 척도를 이용하여 내 위치를 지도의 좌표계로 변환합니다.
setMark()
메소드를 통해 지도의 범례를 설정할 수 있는데, 내 위치를 [MapType.MY](https://maptype.MY)
값으로 설정합니다.
내 위치를 기준으로 모든 장소의 거리를 구해 list
변수에 저장하고 원하는 카테고리만 표시하기 위해 filter()
메소드를 통해 걸러줍니다.
필터 작업 이후 Stream
형으로 나오기 때문에 collect()
메소드를 통해 원래 사용하던 자료구조인 List으로 변경합니다.
SortPlace
클래스에 만든 버블 정렬을 이용하여 정렬 수행 후 sortedList
변수에 결과를 저장합니다.
정렬 알고리즘에 따라 첫번째 값은 가장 가까운 시설이므로 첫번째 값(get(0)
)을 가져와 출력해줍니다.
Graph
클래스에서 만든 전처리 과정 수행 후 지도를 출력해줍니다.