작성일 :

문제 링크

14215번 - 세 막대

설명

삼각형의 성립조건(삼각부등식) 과 관련하여, 세 막대를 이용해 삼각형을 만들 수 있는 최대 둘레를 구하는 문제입니다.

  • 막대 세 개의 길이가 주어집니다.
  • 이 막대로 삼각형을 만들기 위해서는 가장 긴 막대의 길이가 나머지 두 막대 길이의 합보다 작아야 합니다.
  • 조건을 만족하지 않으면 삼각형이 만들어지지 않습니다.
  • 이때 가장 긴 막대의 길이를 줄여서 삼각형 조건을 만족시키는 최대 둘레를 구해야 합니다.

접근법

  • 세 막대의 길이를 입력받아 오름차순 정렬합니다.
  • 가장 긴 막대의 길이가 나머지 둘의 합보다 크거나 같다면, 삼각형이 되지 않으므로
    • 가장 긴 막대를 나머지 두 개의 합 - 1까지 줄여야 합니다.
  • 최종적으로 세 막대 길이의 합을 출력합니다.

Code

[ C# ]

1
2
3
4
5
6
7
8
9
10
11
using System;
using System.Linq;

class Program {
  static void Main() {
    var side = Console.ReadLine().Split().Select(int.Parse).ToArray();
    Array.Sort(side);
    while (side[2] >= side[0] + side[1]) side[2]--;
    Console.WriteLine(side.Sum());
  }
}



[ C++ ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int side[3];
  for (int i = 0; i < 3; i++)
    cin >> side[i];

  sort(side, side + 3);

  while (side[2] >= side[0] + side[1])
    side[2]--;

  cout << side[0] + side[1] + side[2] << "\n";

  return 0;
}