1) 0~3까지 각 꼭지점을 Indexing한다. 답은 3에 해당하는 점이다.
2) 변끼리 평행하다는 것이 보장되 있으므로 평행한 변 끼리의 차는 같다고 한다.
3) 위 수식을 계산하기 앞서 주어진 점중 대각선에 위치한 두 점을 구한다. 총 3개의 점이므로 $3C2$ 만큼 비교하면 되므로 총 3번 비교한다.
4) 3 가지 경우 각각의 x, y 좌표를 구한다. 차는 절대값으로 두었다.
다음은 코드입니다.
~~~c++
#include
#include
using namespace std;
class drawRect{
public:
drawRect(){
for(int i =0 ;i<=3;i++){
rect_x[i]=0;
rect_y[i]=0;
}
}
void inputRect(){
for(int i= 0; i<=2;i++) {
cin >> rect_x[i] >> rect_y[i];
}
}
int findDiag(){ // 대각선에 위치한 좌표끼리의 차는 0이 아니라는 성질을 이용해 해당좌표의 index의 합을 리턴합니다.
if(((rect_x[1] - rect_x[0]) !=0) && ((rect_y[1] - rect_y[0]) != 0)){
return 1;
}
else if(((rect_x[2] - rect_x[1]) !=0) && ((rect_y[2] - rect_y[1]) != 0)){
return 3;
}
else { // 0과 2에 해당하는 좌표가 서로 대각에 위치할 때 입니다.
return 2;
}
}
void findAnsw(int index){
switch (index){
case 1:
rect_x[3] = abs(rect_x[0] - rect_x[2]) + rect_x[1]; // 0과 1에 해당하는 좌표가 서로 대각선에 위치하므로 마주보는 변의 길의는 같다고 두고 변수를 구합니다.
rect_y[3] = abs(rect_y[0] - rect_y[2]) + rect_y[1]; // 마찬가지로 y좌표도 구합니다.
break;
case 2:
rect_x[3] = abs(rect_x[1] - rect_x[0]) + rect_x[2];
rect_y[3] = abs(rect_y[1] - rect_y[0]) + rect_y[2];
break;
case 3:
rect_x[3] = abs(rect_x[0] - rect_x[1]) + rect_x[2];
rect_y[3] = abs(rect_y[0] - rect_y[1]) + rect_y[2];
break;
}
}
void printAnsw(){
cout<<rect_x[3]<<" "<<rect_y[3]<<endl; // 출력합니다.
}
void clearRect(){
for(int i = 0 ;i<=3;i++){
rect_x[i]=0;
rect_y[i]=0;
}
}
private:
int rect_x[4]; // x좌표의 모음입니다. 4번째 좌표는 정답에 해당하는 좌표입니다.
int rect_y[4]; // y좌표의 모음입니다.
};
int main(){
int t;
cin >> t;
drawRect rect1;
while(t--){
rect1.inputRect();
rect1.findAnsw(rect1.findDiag());
rect1.printAnsw();
rect1.clearRect();
}
return 0;
}
~~~
sstzz
문제를 해결하기 위한 제 알고리즘은 다음과 같습니다.
1) 0~3까지 각 꼭지점을 Indexing한다. 답은 3에 해당하는 점이다.
2) 변끼리 평행하다는 것이 보장되 있으므로 평행한 변 끼리의 차는 같다고 한다.
3) 위 수식을 계산하기 앞서 주어진 점중 대각선에 위치한 두 점을 구한다. 총 3개의 점이므로 $3C2$ 만큼 비교하면 되므로 총 3번 비교한다.
4) 3 가지 경우 각각의 x, y 좌표를 구한다. 차는 절대값으로 두었다.
다음은 코드입니다.
~~~c++
#include
#include
using namespace std;
class drawRect{
public:
drawRect(){
for(int i =0 ;i<=3;i++){
rect_x[i]=0;
rect_y[i]=0;
}
}
void inputRect(){
for(int i= 0; i<=2;i++) {
cin >> rect_x[i] >> rect_y[i];
}
}
};
int main(){
int t;
cin >> t;
drawRect rect1;
while(t--){
rect1.inputRect();
rect1.findAnsw(rect1.findDiag());
rect1.printAnsw();
rect1.clearRect();
}
return 0;
}
~~~
어디가 오류인지 아무리봐도 모르겠습니다.
12년 전