728x90
🔗 문제 링크
💡 문제 풀이 및 해석
- 점프와 걷기가 있다. 만약, 점프가 걷기보다 느리다면, 굳이 점프할 필요없이 걷기로만 이동하면 된다.
- 충분히 가까워 진 순간은 "점프 2번으로 갈 수 있는 거리" > "현재 위치에서 목적지까지의 거리" 이다.
- 2번 지점에서는 2가지 선택지가 있다.
3-1. 조금 돌아서 가는 점프 2번의 거리 (최단 경로가 아닌, ^ 모양으로 위로 조금이동하고 아래로 이동하는 방법)
3-2. 목적지를 점프 경로안에 넣고, 남은 거리를 걸어서 목적지 까지 가는 경우
⭐️ 정답 코드 및 설명
#include<iostream>
#include<cmath>
using namespace std;
int X, Y;
double D, T, dist;
double Time = 0;
void init() {
cin >> X >> Y >> D >> T;
dist = sqrt(pow(X, 2) + pow(Y, 2)); // 현재 위치에서 목적지까지의 거리
}
// 2번 점프하는 거리보다 아직 멀리 떨어져있나? 묻는 조건식
bool Jump() {
if (dist > 2*D) {
return true;
}
return false;
}
double sol() {
double answer;
double case3 = dist;
if (T >= D) { // 점프보다 걷는게 빠르거나 같다면, 걸어간다.
return dist;
}
// 최단경로로 아직 점프해도 된다면, 계속 점프
while (Jump()) {
dist -= D;
Time += T;
}
double case1 = Time + 2 * T; // 점프 2번으로 도착
double case2 = Time + T + (abs(dist - D)); // 이제 걸어서감
answer = min(case1, case2);
answer = min(answer, case3);
return answer;
}
int main() {
cout << fixed;
cout.precision(9);
init();
cout << sol() << endl;
return 0;
}
🤔 문제 후기
솔직히 문제가 Gold3 치고는 매우 쉬웠는데, 풀이과정 자체를 생각하는 것이 쉽지는 않았다. 가장 빠르게 도착하는 것이 반드시 최단 거리로 이동해야 한다는 것과는 달랐기 때문에, 이 점만 생각하면 어려운 문제는 아니였지만, 처음에는 이 생각을 하기가 어려웠다.
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[ 백준 15684 ] 사다리 조작 (C++) - DFS, BruteForce (2) | 2024.03.22 |
---|---|
[ 백준 1082 ] 방 번호 (C++) - Greedy (0) | 2024.03.14 |
[ 백준 2631 ] 줄 세우기 (Java) - DP (0) | 2024.03.09 |
[ 프로그래머스 ] 파괴되지 않은 건물 (C++) - 누적합 (0) | 2024.03.09 |
[ 백준 10026 ] 적록색약 (Java) - BFS (0) | 2024.03.09 |