수학 문제입니다.
1번부터 N번 체크포인트까지 순서대로 이동한다는 제약이 있습니다.
그러므로 정답 후보들끼리도 하나의 체크포인트를 제외하여도 나머지 경로는 동일합니다.
예시)
1-2-3-4-5 경로가 있다고 가정
1. 2번 체크포인트 제외하는 경우
1-3-4-5
2. 3번 체크포인트 제외하는 경우
1-2-4-5
3. 4번 체크포인트 제외하는 경우
1-2-3-5
즉, x번 체크포인트를 제외한다고 가정하면
x-1번 체크포인트 -> x번 체크포인트
x번 체크포인트 -> x+1번 체크포인트
위 두 경로만 빼면 나머지 경로는 다른 정답후보들과 동일하다는 뜻입니다.
풀이)
1. 1번부터 N번 체크포인트까지의 경로를 전부 구합니다.
2. 2번~N-1번 체크포인트에 대해 아래 값을 구해봅니다.
i를 임의의 i번째 체크포인트라 가정하고 아래 값을 구해봅니다.
//checkpoint[x] - checkpoint[x-1]은 x번째 체크포인트와 x-1번째 체크포인트 사이의 거리
int before_distance = (checkpoint[i] - checkpoint[i-1]) + (checkpoint[i+1] - checkpoint[i]);
int new_distance = (checkpoint[i+1] - checkpoint[i-1]);
int diff = before_distance - new_distance;
2번~N-1번 체크포인트에 대해 위 값을 구했을 때
diff값이 가장 큰 체크포인트가 제외하였을 때 최단 경로가 되는 체크포인트입니다.
코드: github.com/cotchan/algorithm/blob/main/cpp/BOJ/BOJ10655.cc
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]1759번: 암호 만들기 (0) | 2021.04.08 |
---|---|
[BOJ]15591번: MooTube (Silver) (0) | 2021.03.31 |
[BOJ]1167번: 트리의 지름 (0) | 2021.03.10 |
[BOJ]3197번: 백조의 호수 (0) | 2021.03.08 |
[BOJ]3584번: 가장 가까운 공통 조상 (0) | 2021.03.08 |