문제 소개
이 문제에서는 100미터 경주에서 A가 B와 C에게 각각 허용해 주는 선행 거리(head start)를 나타내는 두 개의 정수가 입력으로 주어집니다. 우리가 작성해야 할 것은 C++로 B가 C에게 주게 되는 상대적인 선행 거리를 계산하는 프로그램입니다.
문제 설명
100미터 달리기를 떠올려 봅시다. A는 B에게 일정 거리를, 그리고 C에게 또 다른 거리를 각각 미리 내어줍니다. 다시 말해, A가 결승선(100m)에 도달하는 순간 B와 C가 각자 위치한 지점이 입력값으로 주어지는 셈입니다. 이 조건을 바탕으로 B가 C에게 실질적으로 주는 선행 거리를 구하는 것이 이 글의 목표입니다.
예시를 통한 문제 이해
입력
20, 28
출력
10
설명
A는 B에게 20미터의 선행 거리를 줍니다. 즉, A가 100미터를 완주했을 때 B는 80미터 지점에 있습니다.
A는 C에게 28미터의 선행 거리를 줍니다. 즉, A가 100미터를 완주했을 때 C는 72미터 지점에 있습니다.
따라서 두 선수의 속도 비율은 'B가 80미터를 달릴 때 C는 72미터를 달린다'로 정리할 수 있습니다.
이 비율을 그대로 적용하면, B가 100미터를 완주했을 때 C가 이동한 거리는 다음과 같습니다.
(72 × 100) / 80 = 90
즉, B가 결승선에 도착하는 순간 C는 90미터 지점에 있으므로, B가 C에게 주는 선행 거리는 100 − 90 = 10미터입니다.
풀이 접근 방법
먼저 A가 100미터를 완주했을 때 B와 C가 각각 이동한 거리를 구합니다. 그다음, B가 100미터를 완주했을 때 C가 이동한 거리를 아래 공식으로 계산합니다.
C가 이동한 거리 = (C의 거리 × 100) / B의 거리
마지막으로 100에서 이 값을 빼면 B가 C에게 주는 선행 거리를 얻을 수 있습니다.
구현 예제
#include <iostream>
using namespace std;
// B가 C에게 주는 선행 거리를 계산하는 함수
int CalcHeadStart(int B, int C) {
return ( 100 - ( ( (100 - C) * 100 ) / (100 - B) ) );
}
int main() {
int B = 12, C = 34;
cout << "Head start in a race by B to C is " << CalcHeadStart(B, C) << " meters";
return 0;
}
출력
Head start in a race by B to C is 25 meters
위 코드에서 B = 12, C = 34일 경우, A가 100미터를 완주하면 B는 88미터, C는 66미터를 달립니다. B가 100미터를 완주하는 동안 C는 (66 × 100) / 88 = 75미터를 이동하므로, B가 C에게 주는 선행 거리는 100 − 75 = 25미터가 됩니다.