※개인 공부 목적의 정리글입니다.
이 글의 내용이 최선의 해답은 아닐 수 있습니다.
문제
영선이는 길이가 a, b, c인 세 막대를 가지고 있고, 각 막대의 길이를 마음대로 줄일 수 있다.
영선이는 세 막대를 이용해서 아래 조건을 만족하는 삼각형을 만들려고 한다.
- 각 막대의 길이는 양의 정수이다
- 세 막대를 이용해서 넓이가 양수인 삼각형을 만들 수 있어야 한다.
- 삼각형의 둘레를 최대로 해야 한다.
a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 a, b, c (\(1 ≤ a, b, c ≤ 100\))가 주어진다.
출력
첫째 줄에 만들 수 있는 가장 큰 삼각형의 둘레를 출력한다.
요약
삼각형의 변의 길이 조건을 알고 있어야한다.
삼각형이 되기 위해서는 가장 긴 변이 나머지 두 변의 합보다 작아야한다.
즉, 세 변 A, B, C 중 가장 긴 변을 C라 하면 \(C < A + B\) 여야 한다는 뜻이다.
문제에서 길이를 줄이는 것이 가능하다고 했으므로 어떤 변의 길이를 줄여서 조건에 맞게 만들면 된다
정답코드
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int A = Integer.parseInt(input[0]);
int B = Integer.parseInt(input[1]);
int C = Integer.parseInt(input[2]);
int[] s = {A, B, C};
Arrays.sort(s);
if(s[0]+s[1] > s[2]){
System.out.println(A+B+C);
}else{
System.out.println((s[0]+s[1]) * 2 - 1);
}
br.close();
}
먼저 세 변의 길이를 입력받아서 정렬하기 위해 배열로 만든 후, Arrays.sort()메소드로 정렬한다.
이렇게 되면 인덱스 2의 값이 가장 긴 변의 길이일 것이다.
먼저 나머지 두 변의 길이의 합이 가장 긴 변의 길이보다 큰지 확인한다. 만약 참이면 길이를 조정할 필요 없이 바로 둘레를 출력한다.
아니면 둘레를 계산해야된다. 변의 길이를 반복문으로 돌리면 1씩 줄이며 계산할 수도 있겠지만, 더 간단한 방법이 있다.
C는 결국 A+B보다 작아야하되, 둘레는 최대여야하므로, C의 길이를 최소한으로 줄였을 때의 길이를 찾아야한다.
즉, C의 길이를 A+B보다 1작게 만들면 되는 것이다.
그렇게 하면 둘레는 다음과 같이 계산 되겠다
\(A + B + C=\\
A + B + (A + B-1)=\\
(A+B) \times 2-1\)
댓글