2018년 10월 12일 금요일

[알고스팟] 사각형 그리기



   사각형 그리기 문제




   181011

#include 
#include 
#include 

void cleanBuffer(void){ 
 while(getchar()!='\n');
}

int main() {
    int cases, i, pt[4][2];
    char pts[20];
    scanf("%d", &cases); cleanBuffer();
    while(cases--) {
        for(i=0;i<3;i++) {
   fgets(pts, 20, stdin);
            pt[i][0]=atoi(strtok(pts, " "));
            pt[i][1]=atoi(strtok(NULL, " "));
        }
        pt[3][0]=(pt[0][0]==pt[1][0])?pt[2][0]:((pt[0][0]==pt[2][0])?pt[1][0]:pt[0][0]);
        pt[3][1]=(pt[0][1]==pt[1][1])?pt[2][1]:((pt[0][1]==pt[2][1])?pt[1][1]:pt[0][1]);
        printf("%d %d\n", pt[3][0], pt[3][1]);
    }
}<3i 20="" atoi="" code="" d="" fgets="" i="" n="" printf="" pt="" pts="" stdin="" strtok="">

직사각형의 네 변이 반드시 뷰포트의 두 축에 평행하다는 힌트를 이용했다. 두 축이 평행하다면 2개의 꼭지점은 반드시 x의 꼭지점이 같거나 y의 꼭지점이 같을 것이기 때문이다.
오래 걸린 부분은 코드를 단축할 수 없을까 하는 부분이었다. 2차원 배열을 비교하는 부분에서 코딩하고 나니까 너무 어지러워서 줄이고 싶었다. 결국 실패했지만.

scanf()와 같이 Buffer로 연속으로 받으면 전의 값이 버퍼에 남아 있어서 다음 입력값은 받을 수 없다. 는 알았던 사실이지만, fflush()가 gcc 환경에서는 사용할 수 없다는 것을 알았다. OS에 따라 다르다고 한다.

* cleanBuffer을 구현한 원리 공부하고 정리하기

댓글 없음:

댓글 쓰기