[C] 백준 14215번 세 막대

김진웅·2023년 8월 26일
0

baekjoon-study

목록 보기
17/59
post-thumbnail

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

문제

영선이는 길이가 a, b, c인 세 막대를 가지고 있고, 각 막대의 길이를 마음대로 줄일 수 있다.

영선이는 세 막대를 이용해서 아래 조건을 만족하는 삼각형을 만들려고 한다.

  • 각 막대의 길이는 양의 정수이다
  • 세 막대를 이용해서 넓이가 양수인 삼각형을 만들 수 있어야 한다.
  • 삼각형의 둘레를 최대로 해야 한다.

a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 a, b, c (1 ≤ a, b, c ≤ 100)가 주어진다.

출력

첫째 줄에 만들 수 있는 가장 큰 삼각형의 둘레를 출력한다.

예제 입력 1

1 2 3

예제 출력 1

5

예제 입력 2

2 2 2

예제 출력 2

6

예제 입력 3

1 100 1

예제 출력 3

3

예제 입력 4

41 64 16

예제 출력 4

113



아이디어 스케치

  • 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 만들기 위해서는 주어진 a,b,c의 막대 길이를 가지고 삼각형의 조건을 만족하면서 가장 둘레가 길게 만들면 된다.
  • 삼각형의 조건은 길이가 가장 긴 변의 길이는 다른 두 변 길이의 합보다 작아야 한다.
  • 즉 주어진 막대 a, b, c의 길이를 내림차순으로 정렬한 후 0번 인덱스의 길이가 1번과 2번 인덱스의 길이의 합보다 작아지는 순간의 둘레의 길이를 구하면 된다.



코드 분할 설명

void arr_sort(int arr[], int n)         //내림차순 정렬
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (arr[i] > arr[j]) {
                arr[i] ^= arr[j];
                arr[j] ^= arr[i];
                arr[i] ^= arr[j];
            }
        }
    }
}
  • 내림차순 정렬을 위해 버블 정렬 알고리즘을 사용하였다.
  • 임시공간 없이 값을 바꾸기 위해 비트 연산을 수행하였다.



scanf("%d %d %d", &a[0], &a[1], &a[2]);

arr_sort(a, length);
  • 삼각형의 세 변의 길이를 입력 받은 후 정렬 함수를 수행한다.



sum = a[1] + a[2];

while (1) {
        if (a[0] < sum) {
            sum += a[0];
            break;
        }
        else a[0] -= 1;
    }
  • 가장 긴 변의 길이가 다른 두 변의 길이의 합보다 작아질 때 까지 길이를 1씩 감소시키면서 반복문을 돌린다.
  • 작아지는 순간 루프를 탈출한다.



전체 코드

#include <stdio.h>
#define length 3

int main()
{
    int a[length];
    int sum = 0;

    scanf("%d %d %d", &a[0], &a[1], &a[2]);

    arr_sort(a, length);

    sum = a[1] + a[2];

    while (1) {
        if (a[0] < sum) {
            sum += a[0];
            break;
        }
        else a[0] -= 1;
    }

    printf("%d", sum);

    return 0;
}

void arr_sort(int arr[], int n)         //내림차순 정렬
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (arr[i] > arr[j]) {
                arr[i] ^= arr[j];
                arr[j] ^= arr[i];
                arr[i] ^= arr[j];
            }
        }
    }
}



제출 결과

profile
IT Velog

0개의 댓글