문제

철수는 총과 함께 과녁을 향해 초속 A미터로 달리고 있다. 달리는 도중에 철수는 (자신을 기준으로) 초속 B미터로 나가는 총알을 과녁 방향으로 발사 했다. 이 때, 총알은 과녁을 향해 초속 몇 미터로 날아가고 있는가?

 

 

조건 및 입출력

1. 첫째 줄에 두 실수 A, B가 공백으로 구분되어 소숫점 둘째자리까지 주어진다. (0 < A, B ≤ 108)

2. 총알은 과녁을 향해 초속 몇 미터로 날아가고 있는지를 출력하여라.

3. 출력과 정답의 절대 혹은 상대 오차가 10-9이하일 경우, 정답으로 판단한다.

 

 

코드
# 입력부
cheolsu,bullet=map(float,input().split());

# 처리부
result=((cheolsu+bullet)/(1+((cheolsu*bullet)/(299792458)**2)));

# 출력부
print("%.2f"%result);

 

 

풀이 과정

대부분의 사람들은 고전역학에 입각해서 문제를 접근했을 것이다. 나 역시도 그랬다.

그냥 두 수의 합을 실수형으로 표현하면 되는거 아니야? 라고 생각했다가 맞왜틀을 외쳤을 것이다.

 

나도 이 문제를 한 동안 묶혀뒀다. 아무리 생각해도 두 수의 합이라고 생각했기 때문이다.

 

그러다 오늘 문득, 침대에서 뒹굴거리다 고등학교 때 물리 선생님이 했던 말씀이 떠올랐다.

"물리 I에서 배우는 상대속도는 고전역학을 적용해도 우리가 살아가는 자연계에서는 큰 무리가 없지만, 빛의 속도에 근접하면 고전 역학이 틀리게 된다."라는 말이 떠올랐고, 구글에 상대성이론의 상대속도를 검색 해 보았다.

 

그래서 로렌츠 변환을 적용한 상대성 이론에서의 상대 속도는 아래와 같다.

 

위 식을 구현해서 코드를 작성하면 정답이다.

 


여담

고전 역학에서 단순히 위 식을 떠올렸지만, 이 문제는 상대성이론을 적용한 상대속도를 구하는 문제였다.

 

C로 풀려고 했는데, 빛의 속력이 너무 커서 (약 299792458 m/s) 파이썬으로 풀었다.

 

하.. 악랄하다.

상대성이론으로 접근해서 푸는 문제였다니.... ㅋㅋ;;;;

 

 


 

코드가 이상하거나, 이해되지 않는 부분은 언제든 댓글 남겨주세요!

+ 더 좋은 풀이 방법이 있다면, 댓글로 알려주세요! :)

+ Recent posts