반응형

 

 

<코드>

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

double X, Y, D, T, ans;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> X >> Y >> D >> T;

	double d = sqrt(pow(X, 2) + pow(Y, 2));
	cout << fixed;
	cout.precision(9);

	if (D < T) // 점프하는것보다 걷는게 더 빠를 때
	{
		cout << d << '\n';
	}
	else
	{
		ans = d;

		int jump = d / D; // 점프 횟수
		d -= jump * D; // 남은 거리

		if (jump == 0) ans = min(ans, min(T + D - d, 2.0 * T));
		else ans = min(ans, min(jump * T + d, (jump + 1.0) * T));
		
		cout << ans << '\n';
	}
	

}

 

풀이 방법

 

점프 횟수가 0이라면 걸어가는 것, 한번 점프 후 걸어가는 것, 2번 점프하는 것 중 작은 값을 고른다.

점프 횟수가 0이 아니라면 점프 후 걸어가는 것과 한번 더 점프하는 것 중 작은 값을 고른다.

 

반례 예시)

 

3 4 3 1

ANS : 2

 

10 10 20 1

ANS : 2

 

 

www.acmicpc.net/problem/1069

 

1069번: 집으로

백은진은 지금 (x, y)에 있고, (0, 0)에 있는 집으로 가능한 빨리 가려고 한다. 백은진은 다음과 같이 두 가지 방법으로 움직일 수 있다. 첫 번째 방법은 걷는것이다. 걸을 때는, 1초에 1만큼 움직인

www.acmicpc.net

 

반응형

+ Recent posts