[Oncoder] 14 : 레이저 발사
풀이
시뮬레이션
레이저가 0,0에서 발사되는데 좌표 두개를 이은 선분에 적중할 확률을 계산 하는 문제이다.
적중할 확률이란것은 180도 중에 (0,0)과 선분을 이은 삼각형을 만들었을때 각도이다.
PS하는데 갑자기 완전 수학적인 문제가 나와서 깜짝놀랐다.
다행히 그래픽 프로그래밍때 atan 메소드를 써봤던게 생각이 났다.
y값이 큰값의 각도 - y값이 작은값의 각도 계산을 해서 계속 더해주면 확률 계산이 끝난다.
코드
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;
#define PI 3.1415926535
//핵심 소스코드의 설명을 주석으로 작성하면 평가에 큰 도움이 됩니다.
class Solution{
public:
double solution(vector<int> x, vector<int> y1, vector<int> y2){
double sum=0;
for(int i=0;i<x.size();i++){
double arg1,arg2;
if(y1[i]>y2[i]){
arg1 = (double)y1[i];
arg2 = (double)y2[i];
}else{
arg1 = (double)y2[i];
arg2 = (double)y1[i];
}
double gack = atan2(arg1,(double)x[i])/PI;
gack -= atan2(arg2,(double)x[i])/PI;
//cout<<gack<<'\n';
sum+=gack;
}
return sum;
}
};
Written on March 17, 2019