배움과 기록의 장
[백준] 14215번: 세 막대 (Java) 본문
✅ 문제
https://www.acmicpc.net/problem/14215
✅ 풀이
- 우선 세 막대를 이용해 삼각형을 만들 수 있는지 판별해야한다.
- 이를 위해, 삼각형의 조건인을 이용해야한다.
- 먼저 주어진 세 막대 중에서 가장 긴 변의 길이인 max와 나머지 두 변의 길이의 합인 remainders를 찾아준다.
- 삼각형의 조건을 만족한다면, 구하고자하는 삼각형의 최대 둘레는 주어진 세 막대길이를 그대로 합한 값이 된다.
- 삼각형의 조건을 만족하지 않는다면, 막대의 길이를 줄여 삼각형의 조건을 만족하는 동시에 최대 둘레를 구해주어야한다.
- 그렇다면 어떤 막대의 길이를 줄여야할까? 정답은 가장 긴 막대이다. 나머지 두 막대 중에선 줄여봤자 삼각형의 조건을 여전히 만족하지 못하기 때문이다.
- 그럼 가장 긴막대를 얼만큼 줄여야할까? 긴막대의 길이는 "나머지 두 막대길이의 합 - 1" 이 되어야한다. 이유는 삼각형의 조건인 가장 긴 변의 길이는 나머지 두 변의 길이의 합보다 작다는 조건을 만족하면서도 최대 둘레를 구해야하기 때문에, 양의 정수인 막대 길이를 고려해 나머지 두 막대 길이합보다 1 작은 값이어야하는 것이다.
✅ 코드
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 max = a;
int remainders = b + c;
if(b > max) {
max = b;
remainders = a + c;
}
if(c > max) {
max = c;
remainders = a + b;
}
if(max >= remainders) {
max = remainders - 1;
}
System.out.println(max+remainders);
}
}
반응형
'problem solving' 카테고리의 다른 글
[백준] 15894번: 수학은 체육과목 입니다 (Java) (0) | 2023.03.25 |
---|---|
[백준] 3009번: 네 번째 점 (Java) (0) | 2023.03.25 |
[백준] 1085번: 직사각형에서 탈출 (Java) (0) | 2023.03.25 |
[백준] 11653번: 소인수분해 (Java) (0) | 2023.03.22 |
[백준] 2563번: 색종이 (Java) (0) | 2023.03.09 |