아이디어
사실 접근 자체는 어렵지 않았다. 일단 원점부터 주어진 좌표까지의 거리를 double로 저장해두고 최대한 점프로 거리를 좁힌 후에 특정 범위에 다다랐을 때 조건분기로 걸린 시간을 구해내겠다는, 단순하지만 해답에 거의 가까운 발상이였다. 조건분기로는 세 가지 경우를 고려했다.
- 점프 두 번
- 점프 한 번 + 걸어서
- 그냥 걸어서
하지만 이걸 조건문으로 돌리려니 어떻게 조건을 걸어야할지 참 막막했고 그냥 MIN을 써서 최소값을 구하는 방식으로 구현했다. 그리고 빼먹은 경우가 있었는데 바로 점프를 어떻게 사용하던 애초에 걷는 속도보다 느린 경우다. 이걸 나중에 알아내서 조건을 추가해줬다.
해답
#include <bits/stdc++.h>
using namespace std;
int main() {
double answer = 0;
int x, y, d, t;
cin >> x >> y >> d >> t;
double remain = sqrt(x * x + y * y);
if ((double)d / t < 1.0)
answer = remain;
else {
while (true) {
if (abs(remain) < d * 2) {
answer += min(min((double)t * 2, abs(remain)), t + abs(remain - d));
break;
}
remain -= d;
answer += t;
}
}
cout.precision(12);
cout << fixed << answer;
return 0;
}
'공부 > 알고리즘(PS)' 카테고리의 다른 글
| BOJ1463 1로 만들기 (0) | 2025.10.05 |
|---|---|
| BOJ1334 다음 팰린드롬 수 (0) | 2025.10.04 |
| BOJ17298 오큰수 (0) | 2025.09.22 |
| 알고리즘 카테고리를 만들며 (0) | 2025.09.21 |