이 문제에서는 네 개의 숫자 d, L, v1, v2가 주어집니다. 두 개의 프레스(press)가 각각 위치 0과 위치 L에 있으며, 서로를 향해 속도 v1과 v2로 다가갑니다. 사람의 몸 너비는 d이며, 두 프레스 사이의 간격이 d보다 좁아지면 사람은 압사하게 됩니다. 우리가 구해야 할 것은 이 사람이 살아남을 수 있는 시간입니다.
예를 들어 입력이 d = 1, L = 9, v1 = 1, v2 = 2라고 가정해 봅시다. 그렇다면 출력 결과는 2.6667이 됩니다.
문제 풀이 접근 방식
이 문제를 해결하기 위해 다음 단계를 따릅니다.
두 프레스가 서로 다가오면서 사람의 몸 너비만큼의 간격(d)까지 줄어드는 데 걸리는 시간을 구하면 됩니다. 즉, 초기 거리 L에서 안전 거리 d를 뺀 값(L − d)을 두 프레스의 상대 속도(v1 + v2)로 나누면 됩니다.
e := (L - d)/(v1 + v2) return e
예제 코드
아래 C++ 구현 예제를 통해 더 자세히 이해해 보겠습니다.
#include <bits/stdc++.h>
using namespace std;
float solve(int d, int L, int v1, int v2){
float e = (L - d) / (float)(v1 + v2);
return e;
}
int main(){
int d = 1;
int L = 9;
int v1 = 1;
int v2 = 2;
cout << solve(d, L, v1, v2) << endl;
}입력
1, 9, 1, 2
출력
2.66667
코드 설명
solve 함수는 안전 거리를 확보한 후 남은 거리(L − d)를 두 프레스의 합산 속도(v1 + v2)로 나누어 생존 시간을 계산합니다. 정수 나눗셈 오류를 방지하기 위해 분모를 float형으로 형 변환한 점에 유의하세요. 위 예제에서는 남은 거리가 8이고 상대 속도가 3이므로, 8 ÷ 3 ≈ 2.66667이라는 결과가 출력됩니다.