Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍으로 점들이 X축 또는 Y축과 평행한지 확인하기

그래프 위에 주어진 n개의 점이 있을 때, 이 점들을 연결한 선이 X축과 평행한지, Y축과 평행한지, 아니면 어느 축에도 평행하지 않은지 판별해야 합니다. 그래프란 두 변수 사이의 관계를 나타내는 도형으로, 각 변수는 서로 직각을 이루는 축을 따라 측정됩니다. 평행(parallel)이란 선 위의 모든 지점에서 거리가 일정한 상태를 의미하며, 마치 철도의 두 레일처럼 서로 평행하게 놓인 선을 떠올리면 쉽습니다.


즉, 우리가 확인해야 할 것은 좌표들과 축 사이의 거리가 모든 점에서 동일한지, 그래서 해당 선이 X축 또는 Y축과 평행한지 여부입니다.

축(Axis)이란?

그래프는 X축과 Y축이라는 두 개의 축을 기준으로 측정됩니다. 두 축은 모두 값 0(원점)에서 시작하며, 각자 담당하는 변수의 값에 따라 확장됩니다. 두 축이 만나면 직각(right angle)을 이루는 형태가 만들어집니다.

다음의 간단한 다이어그램을 통해 더 명확하게 이해해 보겠습니다.

C 프로그래밍으로 점들이 X축 또는 Y축과 평행한지 확인하기

해결 접근 방식

  • 먼저 그래프의 좌표를 (x, y) 형태의 2차원 배열로 입력받습니다.
  • 점들이 어느 축과 평행한지 하나씩 검사합니다.
  • 모든 y 좌표가 같다면 그 선은 수평선이므로 X축과 평행합니다.
  • 그렇지 않고 모든 x 좌표가 같다면 수직선이므로 Y축과 평행합니다.
  • 둘 다 해당하지 않으면 그 선은 어느 축에도 평행하지 않습니다.

알고리즘

Start
In function void parallel(int n, int a[][2])
    Step 1 → bool x = true, y = true 선언
      (x : 모든 y 좌표가 같으면 참 → X축 평행)
      (y : 모든 x 좌표가 같으면 참 → Y축 평행)
    Step 2 → For i = 0 to n - 2 반복
        If a[i][1] != a[i + 1][1] 이면,
            x를 false로 설정
        If a[i][0] != a[i + 1][0] 이면,
            y를 false로 설정
    Step 3 → If x가 참이면,
        "X축에 평행합니다" 출력
    Step 4 → Else if y가 참이면,
        "Y축에 평행합니다" 출력
    Step 5 → Else,
        "어느 축에도 평행하지 않습니다" 출력
In function int main()
    Step 1 → 2차원 배열 a[][2] 선언
    Step 2 → n을 sizeof(a) / sizeof(a[0])로 초기화
    Step 3 → parallel(n, a) 호출
End

C 구현 예제

#include <stdio.h>
#include <stdbool.h>

// 점들이 축에 평행한지 확인하는 함수
void parallel(int n, int a[][2]) {
    int i;
    bool x = true;   // 모든 y 좌표가 같으면 X축과 평행
    bool y = true;   // 모든 x 좌표가 같으면 Y축과 평행

    // 인접한 점들의 좌표를 비교하며 평행 조건 검사
    for (i = 0; i < n - 1; i++) {
        if (a[i][1] != a[i + 1][1])
            x = false;
        if (a[i][0] != a[i + 1][0])
            y = false;
    }

    // 결과 출력
    if (x)
        printf("X축에 평행합니다\n");
    else if (y)
        printf("Y축에 평행합니다\n");
    else
        printf("어느 축에도 평행하지 않습니다\n");
}

int main() {
    int a[][2] = { { 2, 1 },
                   { 3, 1 },
                   { 4, 1 },
                   { 0, 1 } };
    int n = sizeof(a) / sizeof(a[0]);
    parallel(n, a);
    return 0;
}

실행 결과

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 출력됩니다.

X축에 평행합니다

예제의 네 점 {(2,1), (3,1), (4,1), (0,1)}은 모두 y 좌표가 1로 동일합니다. 따라서 이 점들을 지나는 선은 수평선이 되며, 결과적으로 X축과 평행하다는 것이 올바르게 출력됩니다. 이처럼 플래그 변수가 추적하는 좌표와 실제 기하학적 의미(X축 평행 = y 좌표 동일)를 정확히 일치시키는 것이 이 문제의 핵심입니다.