본문 바로가기

코딩/백준 BOJ

[백준/C언어] 3053번 - 택시 기하학

백준 웹사이트 "3053번 - 택시 기하학" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

3053번: 택시 기하학

첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.

www.acmicpc.net


소스 코드

#include <stdio.h>
#define _USE_MATH_DEFINES //M_PI 이용을 위해
#include <math.h>

int main(void){
    int R;
    scanf("%d", &R);

    // 유클리드 기하학의 원: (R^2)π
    // 택시 기하학의 원: 2(R^2) (대각선이 2R인 마름모 모양)
    printf("%f\n", (double) R*R*M_PI);
    printf("%f\n", (double) 2*R*R);
}

문제 풀이

  원이란, 평면 상의 어떤 점에서 거리가 일정한 점들의 집합입니다. 우리가 평소에 사용하는 기하학을 '유클리드 기하학'이라고 하는데, 유클리드 기하학에서의 원은 아래와 같습니다. 익숙한 모양이죠? 평면 상의 점 \((0, 0)\)에서 거리가 4인 점들의 집합은, 아래와 같은 원 \(x^2+y^2=16\)입니다.

유클리드 기하학의 원

유클리드 기하학에서 반지름이 \(R\)인 원의 넓이는 \(R^2\pi\)입니다.

 

  택시 기하학은 유클리드 기하학이 아닌 기하학, '비유클리드 기하학'입니다. 비유클리드 기하학에는 여러가지가 있는데, 그 중 택시 기하학에서는 두 점 사이의 거리 \(D(T1,T2) \)가 \(|x1-x2|+|y1-y2|\)로 정의됩니다. 거리의 정의가 달라짐에 따라 원의 정의도 달라지는데, 택시 기하학에서의 원은 아래와 같습니다.

비유클리드 기하학의 원

평면 상의 점 \((0, 0)\)에서 (택시 기하학 상) 거리가 4인 점들의 집합은, 위와 같이 \(|x|+|y|=4\)입니다. 예를 들어, \((4, 0)\)은 거리가 \(|4-0|+|0-0|=4\)이고, \((1, 3)\)도 거리가 \(|1-0|+|3-0|=4\)입니다. 택시 기하학에서 반지름이 \(R\)인 원은 유클리드 기하학에서 대각선의 길이가 \(2R\)인 마름모와 동일하므로, 넓이는 \(2R^2\)입니다.

 

  지금까지 정리한 내용을 바탕으로 소스 코드를 작성해봅시다. C언어에서 \(\pi\) 값을 활용하기 위해서는 Line 2~3와 같이 헤더 파일을 추가해야 합니다.

#define _USE_MATH_DEFINES //M_PI 이용을 위해
#include <math.h>

이 코드의 뜻은, <math.h>에 저장된 (define 된) 여러가지 값들을 불러온다는 것입니다. 이 중 \(\pi\) 값은 'M_PI'를 통해 접근 가능합니다. 이 값은 소수 값이므로, 출력할 때 "%f"를 이용해주세요!

반응형