본문 바로가기

IT

[algospot/알고리즘] 알고스팟, '왕초보' 난이도 DRAWRECT 풀기

왕초보 세번째 문제를 풀어보기로 합니다.

이번 문제까지 패스하면 이제 삼천대에서 이천대로 순위가 상승하겠네요.


이 포스팅을 보고 계실 분들과도 함께 풀어보고 싶습니다.

한가로운 오후를 무료하게 보내고 계시다면,

함께 알고리즘을 소재로 열혈코딩하시죠~



- 제목 : DRAWRECT

- 난도 : ☆☆ (0점/5점)

- 문제 : 직사각형의 3개 점이 주어졌을때 다른 한 점을 유추하세요.

- 답안

#include <stdio.h>

int main(int argc, char **argv)
{
    register int i = 0;
    int count = 0;

    scanf("%d", &count);

    for (; i < count; i++) {
        int x[2] = {0, };
        int y[2] = {0, };
        int j = 0;
        int tx = 0;
        int ty = 0;

        for (; j < 3; j++) {
            scanf("%d %d", &tx, &ty);

            if (x[0] == 0) x[0] = tx;
            else if (x[0] == tx) x[0] = 0;
            else if (x[1] == 0) x[1] = tx;
            else if (x[1] == tx) x[1] = 0;
           
            if (y[0] == 0) y[0] = ty;
            else if (y[0] == ty) y[0] = 0;
            else if (y[1] == 0) y[1] = ty;
            else if (y[1] == ty) y[1] = 0;

        }

        printf("%d %d\n", x[0] + x[1], y[0] + y[1]);
    }

    return 0;
}

좌표평면 상에서는 x축 2개, y축 2개로 직사각형을 표현할 수 있습니다.

문제를 간단하게 보기 위해 우선 x축 먼저 생각해보기로 하지요.

x축 2개에 총 4개의 점을 배정해야 합니다.

각 축은 점 2개씩 가지고 있게 되겠죠.

점이 3개가 주어졌다면, 2개는 같은 축이고 다른 하나는 알려지지 않은 점과 같은 축이겠지요.

따라서 3개의 점을 분석하여 중복한 축은 그냥 0으로 제거해버리고 중복되지 않은 값만 남깁니다.


x와 마찬가지로 y도 진행합니다.

y축도 역시 2개의 축을 대상으로 하기 때문에 2개의 저장공간만 있으면 됩니다.

아래와 같은 자료형만 사용하면 문제를 풀 수 있습니다.


위의 문제로 총 4문제를 풀었습니다.

순위는 2626위로 올랐습니다.

아직은 워낙 낮은 순위이다 보니 한 문제만 풀더라도 순위는 비약적으로 올라가네요.


그럼 좋은 하루 보내세요~

끝_