본문 바로가기
Development/Baekjoon

[C#] 14215번: 세 막대

by Mobics 2025. 9. 27.

목차


    백준 단계별로 풀어보기

    25.09.27

    10단계: 기하 1: 직사각형과 삼각형


    14215번: 세 막대

    문제 링크 : https://www.acmicpc.net/problem/14215

     

    문제 풀이

    >> 문제를 풀기 위해 알아야 할 개념

    - 삼각형의 조건을 맞추는 법

    : 삼각형이 되려면 가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 더 길어야 한다.

    --> 가장 긴 변이 나머지 두 변의 길이의 합보다 길다면 가장 긴 변의 길이를 나머지 '두 변의 길이의 합 - 1' 으로 줄이면 만들 수 있는 가장 큰 둘레를 가진 삼각형이 된다.

     

    >> 풀이

    1. 막대의 길이를 담을 int 배열을 선언하고, 막대의 길이의 합을 담을 변수 'sum'과 가장 긴 막대의 길이를 담을 변수 'largest'를 선언한다.
    2. 입력값을 받은 다음 for 반복문을 통해 3번 반복하면서 받은 입력값을 배열에 넣고 sum에 더해주고 가장 긴 막대의 길이를 찾아 largest에 대입해준다.
    3. 만약 가장 긴 막대의 길이보다 다른 두 막대의 길이의 합이 작거나 같다면, 삼각형의 조건을 만족하지 못하므로 가장 긴 변의 길이를 '남은 두 막대의 길이의 합 - 1'으로 줄인 다음 둘레의 길이를 측정하여 출력한다.
      •     다른 두 막대의 길이의 합 : sum - largest
      •     줄인 가장 긴 막대의 길이 : sum - largest - 1
      •     둘레의 길이 : sum - largest + sum - largest - 1 --> 2 × (sum - largest) - 1
    4. 가장 긴 막대의 길이보다 다른 두 막대의 길이의 합이 더 길다면 삼각형의 조건을 만족하므로 길이를 건들이지 않고 바로 sum을 출력한다.

     

    정답 코드

    class Backjoon
    {
        static void Main(string[] args)
        {
            int[] arr = new int[3];
            int sum = 0;
            int largest = 0;
            
            string[] input = Console.ReadLine().Split();
    
            for (int i = 0; i < 3; i++)
            {
                arr[i] = int.Parse(input[i]);
                sum += arr[i];
                if (arr[i] > largest) largest = arr[i];
            }
    
            if (sum - largest <= largest)
            {
                sum = 2 * (sum - largest) - 1;
                Console.Write(sum);
            }
            else
            {
                Console.Write(sum);
            }
        }
    }