[백준] 16891 - 탄성 충돌

[문제]

https://www.acmicpc.net/problem/16891

[풀이]

두 물체 A와 B가 충돌했을 때의 속도는 문제에 나와있는 공식을 그대로 써주면 된다.
충돌이 언제 끝나는지 고려해 주면 된다.

A가 왼쪽으로 운동하면 벽과 충돌하여 운동 방향만 바뀐다.
B가 왼쪽으로 운동할 때는 언젠간 A와 충돌한다.
B가 오른쪽으로 운동할 때에는 A가 B보다 속력이 크면 언젠가 충돌한다.
A와 B가 오른쪽으로 운동하고 B의 속력이 A의 속력보다 크면 더 이상 충돌하지 않는다.

이 문제의 상황은 꽤나 유명한 것으로 자세한 설명은 다음 링크의 영상에서 볼 수 있다.
https://www.youtube.com/watch?v=jsYwFizhncE

[코드]

[Python3]

[Ver1]
N=int(input())**2
ans=0
A=0;B=-100
while 1:
    if 0<=A<=B: break
    ans+=1
    a = (1-N)/(1+N)*A + 2*N/(1+N)*B
    B = (N-1)/(N+1)*B + 2/(N+1)*A
    A = a
    if A < 0:
        ans+=1
        A*=-1
print(ans)

B를 -100으로 초기화한 것에 특별한 의미는 없다.
음수로 설정하여 A에게 다가가도록 했다.

[Ver2]
from math import *
print(int(pi/atan(1/int(input())) - 0.001))

(충돌 횟수)\cdotarctan(1N)arctan(\frac{1}{N})

좋은 웹페이지 즐겨찾기