[작성일: 2023. 10. 08]
https://www.acmicpc.net/problem/14215
풀이
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[3];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
sc.close();
Arrays.sort(arr);
int triangle = 0;
if (arr[2] < arr[0] + arr[1]) {
triangle = arr[0] + arr[1] + arr[2];
} else {
arr[2] = arr[0] + arr[1] - 1;
triangle = arr[0] + arr[1] + arr[2];
}
System.out.println(triangle);
}
}
이 문제를 풀 때 고려해야 할 점이 있다.
- 삼각형의 제일 큰 변의 길이는 나머지 두 변의 길이의 합보다 짧아야 한다.
- 이 조건에 만족한다면 세 변의 길이를 더한 값을 출력하면 된다.
- 이 조건에 만족하지 않으면 가장 긴 변의 길이를 나머지 두 변의 길이의 합보다 1 작게 만든다. (가장 큰 둘레를 위함)
처음에는 Math클래스의 max 메서드로 이 문제를 풀었는데 어차피 배열의 크기가 3으로 정해져있으므로 배열로 푸는 게 더 깔끔하다는 생각이 들어 코드를 수정했다.
입력받은 세 수를 배열에 담고 sort로 정렬한다. 오름차순 정렬이므로 arr[2]가 제일 긴 변이 될 것이고, arr[0] + arr[1]보다 arr[2]가 짧다면 세 변의 합을 더하고, 그렇지 않다면 arr[0]의 길이를 조절한다.