목차
백준 단계별로 풀어보기
25.09.27
10단계: 기하 1: 직사각형과 삼각형
14215번: 세 막대
문제 링크 : https://www.acmicpc.net/problem/14215
문제 풀이
>> 문제를 풀기 위해 알아야 할 개념
- 삼각형의 조건을 맞추는 법
: 삼각형이 되려면 가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 더 길어야 한다.
--> 가장 긴 변이 나머지 두 변의 길이의 합보다 길다면 가장 긴 변의 길이를 나머지 '두 변의 길이의 합 - 1' 으로 줄이면 만들 수 있는 가장 큰 둘레를 가진 삼각형이 된다.
>> 풀이
- 막대의 길이를 담을 int 배열을 선언하고, 막대의 길이의 합을 담을 변수 'sum'과 가장 긴 막대의 길이를 담을 변수 'largest'를 선언한다.
- 입력값을 받은 다음 for 반복문을 통해 3번 반복하면서 받은 입력값을 배열에 넣고 sum에 더해주고 가장 긴 막대의 길이를 찾아 largest에 대입해준다.
- 만약 가장 긴 막대의 길이보다 다른 두 막대의 길이의 합이 작거나 같다면, 삼각형의 조건을 만족하지 못하므로 가장 긴 변의 길이를 '남은 두 막대의 길이의 합 - 1'으로 줄인 다음 둘레의 길이를 측정하여 출력한다.
- 다른 두 막대의 길이의 합 : sum - largest
- 줄인 가장 긴 막대의 길이 : sum - largest - 1
- 둘레의 길이 : sum - largest + sum - largest - 1 --> 2 × (sum - largest) - 1
- 가장 긴 막대의 길이보다 다른 두 막대의 길이의 합이 더 길다면 삼각형의 조건을 만족하므로 길이를 건들이지 않고 바로 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);
}
}
}
'Development > Baekjoon' 카테고리의 다른 글
[C#] 24263번: 알고리즘 수업 - 알고리즘의 수행 시간 2 (0) | 2025.09.29 |
---|---|
[C#] 24262번: 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2025.09.28 |
[C#] 5073번: 삼각형과 세 변 (0) | 2025.09.26 |
[C#] 10101번: 삼각형 외우기 (0) | 2025.09.25 |
[C#] 9063번: 대지 (0) | 2025.09.24 |