그래프 위에 주어진 n개의 점이 있을 때, 이 점들을 연결한 선이 X축과 평행한지, Y축과 평행한지, 아니면 어느 축에도 평행하지 않은지 판별해야 합니다. 그래프란 두 변수 사이의 관계를 나타내는 도형으로, 각 변수는 서로 직각을 이루는 축을 따라 측정됩니다. 평행(parallel)이란 선 위의 모든 지점에서 거리가 일정한 상태를 의미하며, 마치 철도의 두 레일처럼 서로 평행하게 놓인 선을 떠올리면 쉽습니다.
즉, 우리가 확인해야 할 것은 좌표들과 축 사이의 거리가 모든 점에서 동일한지, 그래서 해당 선이 X축 또는 Y축과 평행한지 여부입니다.
축(Axis)이란?
그래프는 X축과 Y축이라는 두 개의 축을 기준으로 측정됩니다. 두 축은 모두 값 0(원점)에서 시작하며, 각자 담당하는 변수의 값에 따라 확장됩니다. 두 축이 만나면 직각(right angle)을 이루는 형태가 만들어집니다.
다음의 간단한 다이어그램을 통해 더 명확하게 이해해 보겠습니다.

해결 접근 방식
- 먼저 그래프의 좌표를 (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) 호출
EndC 구현 예제
#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 좌표 동일)를 정확히 일치시키는 것이 이 문제의 핵심입니다.