문제

백준 18017번 총알의 속도

해결 과정

처음에 문제를 보고 바로 를 제출했다가 틀려버렸다. 그래서 문제를 다시 읽어보니, 총알의 속력이 빛의 속도에 근접할 수 있다는 것을 알게 되었다. 이러면 상대성 이론을 사용하여 문제를 풀어야 한다. 인터넷에 검색해 보면 빛의 속도가 m/s 임을 알 수 있다. 따라서 상대성 이론에 따르면, 과녁의 관성계에서 총알의 속력은 다음과 같다.

여기서 는 철수의 속력, 는 철수의 관성계에서 총알의 속력, 는 빛의 속도다. 이를 코드로 구현하면 다음과 같다.

예시 답안

실제 정답과 출력값의 오차를 까지 허용하므로 소수점 아래 10자리까지 출력하면 된다.

C++ 코드

Baekjoon/18xxx/18017.cpp
#include <iomanip>
#include <iostream>
using namespace std;
 
void solve(void) {
  double A, B; cin >> A >> B;
  double c = 299792458.0;
 
  cout << fixed << setprecision(10) << (A + B) / (1 + A * B / c / c);
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}

효율성 분석

시간 복잡도공간 복잡도

문제 풀이 팁

int로 나눗셈을 하면 몫만 출력된다. double로 나눗셈을 하면 실수가 출력된다.

<iomanip>std::fixedstd::setprecision을 사용하면 출력 자릿수를 조절할 수 있다.

std::fixed는 고정 소수점 표기법을 사용하고, std::setprecision은 소수점 아래 자릿수를 설정한다.