[BOJ 1069] 집으로
2023. 2. 2. 23:27ㆍBaekjoon
728x90
https://www.acmicpc.net/problem/1069
- 문제 요약
은진이는 지금 (X, Y)(1<=X,Y<=1000)에 있고, (0, 0)에 있는 집으로 가능한 빨리 가려고 한다. 이동할 수 있는 방법은 다음 두 가지이다.
첫 번째 방법은 걷는 것이다. 걸을 때는 1초에 1만큼 움직인다. 두 번째 방법은 점프하는 것이다. 점프를 하게 되면, T초에 D(1<=T,D<=10000)만큼 움직인다. 점프는 일직선으로만 할 수 있고, 정확하게 D칸만 움직일 수 있다.
위의 두 가지 방법을 이용해서 집에 돌아오는 데 걸리는 시간의 최솟값을 구하는 프로그램을 작성하시오. 꼭 한 가지 방법만 사용해야 되는 것이 아니고, 두 가지 방법을 적절히 조합해서 가장 빠른 시간을 구하는 것이다.
첫째 줄에 집에 돌아오는 데 걸리는 시간의 최솟값을 출력한다. 절대/상대 오차는 10^-9까지 허용한다.
- 알고리즘 정리
점프 횟수에 따라 케이스를 나눠서 처리해 줬습니다.
int형 변수 j에 점프 횟수를 넣어놓고, 0일 때는 걷기, 점프 1회 + 걷기, 점프 2회 중 작은 값을 골랐습니다.
0이 아닐 때는 점프 1회 + 걷기, 점프 1회 추가 중 작은 값을 골라줬습니다.
- 코드 작성
#include<bits/stdc++.h>
using namespace std;
double x,y,d,t,result;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>x>>y>>d>>t;
double w=sqrt(pow(x,2)+pow(y,2));
cout<<fixed;
cout.precision(9);
if(d<t){
cout<<w;
}
else{
result=w;
int j=w/d;
w-=j*d;
if(j==0){
result=min(result,min(result,min(t+d-w,2.0*t)));
}
else{
result=min(result,min(j*t+w,(j+1.0)*t));
}
cout<<result;
}
}
소수점 처리 잘못해서 맞왜틀 4번....ㅠ
728x90
'Baekjoon' 카테고리의 다른 글
[BOJ 20543] 폭탄 던지는 태영이 (0) | 2023.02.04 |
---|---|
[BOJ 14572] 스터디 그룹 (0) | 2023.02.03 |
[BOJ 14454] Secret Cow Code (0) | 2023.01.27 |
[BOJ 26973] Circular Barn (0) | 2023.01.27 |
[BOJ 15748] Rest Stops (0) | 2023.01.25 |