9553 양궁
수학을 안 한지 오래되어서 처음엔 다소 당황스러웠지만, 천천히 고민해보니 그냥 (1)각 타겟의 양 끝에 해당하는 범위를 (2)확률로 환산하여 (3)다 더해주면 된다는 것을 짐작할 수 있었다.
처음엔 아크탄젠트로 접근했다. 수학이 오랜만이라 뭐가 더 효율적인지는 모르겠고 기억나는 각 구하는 방법이 이것밖에 없었다...😭
하지만, zeroDivision 등등 고려해야할게 많은 것 같아 아크코사인으로 갈아탔다. 삼각형의 세 변 a, b, c를 이용해서 a, b의 사잇각을 구하는 공식을 사용했다. 이것밖에 생각나는게 없었다...😭 예제가 맞게 잘 돌아가서 제출했으나 런타임에러(ValueError)!! 도대체가 이해가 안 가서 ValueError가 나는 원인을 찾아다녔지만 그냥 내 코드에 빈틈이 있는 걸로 판정이 났다. 이 코드의 경우에는 방향성을 고려하지 않았기때문에 θ와 θ+2π의 구분이 없었던 것 같다..
마지막으로 벡터의 내적을 이용해서 사잇각을 구하는 방식으로 문제를 해결했다.
타겟이 원점을 지날경우는 제외해주어야 한다.
import math exp = 0.000000 T = int(input()) for i in range(T): N = int(input()) for j in range(N): X1, Y1, X2, Y2 = map(int, input().split()) if (X1 == -X2 and Y1 == -Y2) or (X1 == 0 and Y1 == 0) or (X2 == 0 and Y2 == 0): break else: exp += math.acos((X1*X2 + Y1*Y2)/math.sqrt((X1*X1 + Y1*Y1)*(X2*X2 + Y2*Y2))) print("{:.5f}".format(round(exp/(math.pi*2), 5))) exp = 0.00000
계산법은 기억이 나지않아(수학 어쩌지...) 아래 사이트를 참고했다.
https://www.mathway.com/ko/popular-problems/Trigonometry/392481
Author And Source
이 문제에 관하여(9553 양궁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kueyeon0429/9553-양궁저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)