[20250821] B형 / SWEA / 전기차여행 / 이강현 #707
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🧷 문제 링크
🧭 풀이 시간
150분
👀 체감 난이도
✏️ 문제 설명
전기차로 출발지에서 목적지로 이동할거임.
다음과 같은 메소드가 있음.
도시에는 충전소가 한 개씩 있음. 여기서 전기차의 전기가 부족하면 충전하고 가야함. 초당 충전량이 주어짐.
간선에는 이동하는 시간, 사용하는 전기, id가 주어짐.
전염병은 특정 위치에서 발생하기 시작함. 전염병이 이동하는 시간은 전기차가 간선을 통해 이동하는 시간과 공유함.
도착지까지 가는 최소 시간을 구해야 함.
🔍 풀이 방법
다익스트라
전염병은 전기가 필요없기에 전염병 전용 다익스트라로 시간만을 이용해서 하나 만들고
전기차 전용 다익스트라를 따로 구현함.
상태를 다음과 같이 정의했음.
이 지점까지 오는데 걸린 시간과 남은 용량이 하나의 상태임.
매 지점마다 다음 지점으로 이동하기 위한 최소 전기를 얻게될 때, 전염병을 만나지 않고 dist 배열을 업데이트 할 수 있으면 큐에 추가.
현재 지점에서 충전을 더 하는게 추후 이득이 될 수 있기에 최대 충전 용량까지 충전하며 조건에 맞으면 상태를 더 넣어줬음.
전염병 각각 시작위치에서 다익스트라를 진행하고 각 도시마다 전염병이 하나라도 도착하면 이동할 수 없기에
전염병중 가장 먼저 도착하는 경우만을 저장한 배열을 하나 만들고 전기차 전용 다익스트라의 파라미터로 제공함.
이는 상태 추가 조건에 활용됨.
전기차 다익스트라가 마무리된 후, 도착지점의 모든 전기 용량에 대해서 최소 시간을 뽑아서 출력.
⏳ 회고
간선의 사용 전기 용량이 전기차의 최대 전기 용량보다 크다면 이동할 수 없기에 예외 처리 해줘야 했음.
구현 후 시간 초과 문제가 발생했는데,
출발지와 도착지가 주어졌고 다익스트라 특성상 가장 먼저 도착지에 도착하는 경우가 최소 시간이므로
가지치기를 해주었더니 통과할 수 있었음.
가지치기를 잘하는게 핵심이었던 것 같다.