WalkerJei's Lifelog

백준알고리즘 4153번 직각삼각형 C# 본문

소프트웨어 개발/코딩테스트(기성 문제)

백준알고리즘 4153번 직각삼각형 C#

WalkerJei 2025. 3. 8. 19:07

세부 정보

  • 사이트: 백준알고리즘
  • 번호: 4153
  • 문제명: 직각삼각형
  • 언어: C#
  • 분류: 수학, 기하학, 피타고라스 정
  • 비고: 

 

문제

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

 

입력

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

 

출력

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

 

풀이

입력 양식은 이틀 전에 푼 문제와 같았다. While문을 이용해서 무한 입출력을 할 수 있되 모든 값이 0이면 종료하는 방식이다.

2025.03.06 - [소프트웨어 개발/코딩테스트] - 백준알고리즘 5086번 배수와 약수 C#

 

백준알고리즘 5086번 배수와 약수 C#

세부 정보사이트: 백준알고리즘번호: 5086번문제명: 배수와 약수언어: C#분류: 수학, 사칙연산비고:  문제4 × 3 = 12이다.이 식을 통해 다음과 같은 사실을 알 수 있다.3은 12의 약수이고, 12는 3의 배

walkerjei-lifelog.tistory.com

피타고라스의 정리를 이용하는 만큼 가장 긴 변의 길이의 제곱이 나머지 2개 변의 길이를 각각 제곱한 다음 그 값을 더한 것과 같으면 직각삼각형이다.

while (true)
{
    // 입력 받기
    string input = Console.ReadLine();
    int[] line = new int[3];
    
    // 입력값을 공백으로 구분 후 정수 형태로 바꿔 저장
    line[0] = Convert.ToInt32(input.Split()[0]);
    line[1] = Convert.ToInt32(input.Split()[1]);
    line[2] = Convert.ToInt32(input.Split()[2]);

    // 배열을 오름차순으로 정리
    Array.Sort(line);

    // 모든 입력값이 0이면 종료
    if (line[0] == 0 && line[1] == 0 && line[2] == 0)
        break;

    // 가장 긴 변의 제곱이 중간 길의 변의 제곱과 가장 짧은 변의 제곱의 합과 같으면 직각삼각형이다
    if (Math.Pow(line[2], 2) == Math.Pow(line[1], 2) + Math.Pow(line[0], 2))
        Console.WriteLine("right");
    else Console.WriteLine("wrong");
}

 

후기

지난번에 입력 양식 때문에 고생했지만 알고 난 이후 유사한 형태의 문제는 금방 풀 수 있었다. 30분의 제한 시간을 두었는데 그 시간 내에 푸는 것도 성공했다. 이렇게 실력이 늘어나니 기분이 좋지만 전공자라면 당연히 풀 수 있어야 하는 난이도의 문제인 만큼 안주할 수 없다. 

참고로 문제의 출처가 Contest > Waterloo's local Programming Contests > 2 October, 2010 A번 이렇게 된다.