Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ – 강물 흐름 속도와 상·하류 이동 시간 비율로 사람의 속도 구하기


이 문제에서는 두 값 S와 N이 주어집니다. S는 강물의 흐름 속도(km/h)를 나타내고, N은 상류 방향과 하류 방향으로 이동할 때 걸리는 시간의 비율을 나타냅니다. 우리가 해야 할 일은 이 두 값을 이용해 노를 젓는 사람의 실제 이동 속도를 구하는 것입니다.

먼저 예시를 통해 문제를 이해해 보겠습니다.

입력

S = 5, N = 2

출력

15

풀이 접근법

이 문제는 배 젓기(rowing) 문제에 널리 쓰이는 수학적 관계식을 활용하면 간단히 해결할 수 있습니다. 그럼 공식이 어떻게 도출되는지 단계별로 살펴보겠습니다.

사람의 속도 = x km/h
강물의 흐름 속도 = S km/h
하류 방향(흐름을 따라 내려갈 때) 속도 = (x + S) km/h
상류 방향(흐름을 거슬러 올라갈 때) 속도 = (x - S) km/h
하류로 일정한 거리를 이동하는 데 걸리는 시간 = T
상류로 같은 거리를 이동하는 데 걸리는 시간 = n × T
하류 이동 거리 = (x + S) × T
상류 이동 거리 = (x - S) × n × T
두 거리가 서로 같으므로,
(x + S) × T = (x - S) × n × T
x + S = nx - nS
S + nS = nx - x
S × (n + 1) = x × (n - 1)

위 식을 정리하면 사람의 이동 속도 x는 다음과 같이 계산됩니다.

x = S × (n + 1) / (n − 1)

이 풀이가 실제로 동작하는 모습을 보여주는 프로그램입니다.

예제

#include <iostream>
using namespace std;

float calcManSpeed(float S, int n) {
    return (S * (n + 1) / (n - 1));
}

int main() {
    float S = 12;
    int n = 3;
    cout<<"사람의 속도는 "<<calcManSpeed(S, n)<<" km/hr";
    return 0;
}

출력

사람의 속도는 24 km/hr

위 예제에서 강물의 흐름 속도 S는 12km/h, 상·하류 이동 시간 비율 n은 3입니다. 공식에 대입하면 12 × (3 + 1) ÷ (3 − 1) = 12 × 4 ÷ 2 = 24km/h가 되어, 사람의 이동 속도는 24km/h임을 알 수 있습니다.