문제

19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다.

택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다.

D(T1,T2) = |x1-x2| + |y1-y2|

두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다.

따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다.

원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합

반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와, 택시 기하학에서 원의 넓이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 반지름 R이 주어진다. R은 10,000보다 작거나 같은 자연수이다.

출력

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

택시 기하학이라는걸 처음 들어봐서 관련 지식부터 공부했다.

 

https://librewiki.net/wiki/%ED%83%9D%EC%8B%9C_%EA%B8%B0%ED%95%98%ED%95%99

 

택시 기하학

Taxicab Geometry.

librewiki.net

해당 위키에서 택시 기하학이 뭔지 파악했고 택시 기하학에서 원은 마름모가 된다는걸 알았다.

마름모의 넓이를 구할 수 있다면 이번 문제는 쉽게 해결 될 것이다.

 

택시 기하학 원의 마름모는 대각선의 길이가 같기때문에 

2 * R * R = 마름모의 넓이, 해당 공식으로 넓이를 구할 수 있다.

 

코드는 다음과 같다.

 

1
2
3
4
5
6
7
8
9
10
11
using System;
class Program
{
    static void Main(string[] args)
    {
         int iR = int.Parse(Console.ReadLine());
 
         Console.WriteLine((iR * iR * Math.PI).ToString("0.######"));
         Console.WriteLine((2 * iR * iR).ToString("0.######"));
    }
}
cs

 

https://www.acmicpc.net/problem/3053

 

3053번: 택시 기하학

문제 19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다. 택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다. D(T1,T2) = |x1-x2| + |

www.acmicpc.net

 

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

 

직각 삼각형의 정수비를 이용하여 풀이함.

ex) 3:4:5 => 32 + 42 = 52

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Linq;
using System.Text;
class Program
{
    static void Main(string[] args)
    {
         StringBuilder sResult = new StringBuilder();
         for(; ;)
         {
            int[] arrValue = Console.ReadLine().Split().Select(n => int.Parse(n)).ToArray();
            Array.Sort(arrValue);
            if (arrValue[0== 0break;
            if((Math.Pow(arrValue[0],2+ Math.Pow(arrValue[1],2)) == Math.Pow(arrValue[2],2))
            {
              sResult.Append("right\n");
            }
            else
            {
              sResult.Append("wrong\n");
            }
         }
         Console.WriteLine(sResult);
    }
}
cs

 

https://www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

문제 과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오. 입력 입력은 여러개의 테스트케이스로

www.acmicpc.net

 

문제

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

입력

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

출력

직사각형의 네 번째 점의 좌표를 출력한다.

X, Y 좌표 각각 중복 없는 수가 네 번째 점이다.

비교문을 통해 중복 없는 수를 구함.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Linq;
 
class Program
{
    static void Main(string[] args)
    {
         int[] x = new int[3];
         int[] y = new int[3];
         int iResultX;
         int iResultY;
         for(int i = 0; i < 3; i++)
         {
            string[] s = Console.ReadLine().Split().ToArray();
            x[i] = int.Parse(s[0]);
            y[i] = int.Parse(s[1]);
         }
 
        if (x[0== x[1]) iResultX = x[2];
        else if (x[0== x[2]) iResultX = x[1];
        else iResultX = x[0];
 
        if (y[0== y[1]) iResultY = y[2];
        else if (y[0== y[2]) iResultY = y[1];
        else iResultY = y[0];
 
        Console.WriteLine(iResultX + " " + iResultY);
    }
}
cs

 

https://www.acmicpc.net/problem/3009

 

3009번: 네 번째 점

문제 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오. 입력 세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고,

www.acmicpc.net

 

+ Recent posts