Java/백준알고리즘

[Java] 백준알고리즘 #14215 세 막대

Sehyeok20 2023. 10. 6. 19:39
반응형

백준알고리즘 #14215 세 막대
백준알고리즘 #14215 세 막대 출력

 

3개의 수를 입력받아서 만들 수 있는 가장 큰 삼각형의 둘레를 구하는 문제. 다만 막대는 줄이기만 가능하다.

 

먼저 삼각형을 만들 수 없는 조건을 알아보자.

두 변 길이의 합 < 나머지 한 변의 길이

인 경우는 삼각형을 만들 수 없다. (같은 경우는 직선이 된다.)

2 1 1 / 2 3 5 / 3 5 10 등과 같은 경우이다.

 

때문에 삼각형을 만들기 위해서는 가장 긴 변의 길이를 줄여나가야 한다.

2 1 1 / 2 3 5 / 3 5 10 의 경우

1 1 1 / 2 3 4 / 3 5 7  로 바꾼다면 삼각형을 만들 수 있다.

 

 

먼저 입력받은 세 수중 가장 큰 값을 a로 지정한다.

int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int tmp = 0;

if (a < b) {
    tmp = a;
    a = b;
    b = tmp;
}
if (a < c) {
    tmp = a;
    a = c;
    c = tmp;
}

 

이후 반복문을 통해 나머지 두 변 (b, c)의 합이 a보다 커질 때, 삼각형의 합을 출력하고 반복문을 종료하면 된다.

아닌 경우라면 최댓값인 a를 1씩 줄여나간다.

while (true) {
    int sum = a + b + c;
    if (b + c > a) {
        System.out.println(sum);
        break;
    } else {
        a--;
    }
}

 

 

전체 코드는 다음과 같다.

 

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int tmp = 0;

        if (a < b) {
            tmp = a;
            a = b;
            b = tmp;
        }
        if (a < c) {
            tmp = a;
            a = c;
            c = tmp;
        }

        while (true) {
            int sum = a + b + c;
            if (b + c > a) {
                System.out.println(sum);
                break;
            } else {
                a--;
            }
        }
        sc.close();
    }
}
반응형