반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

배움과 기록의 장

[백준] 14215번: 세 막대 (Java) 본문

problem solving

[백준] 14215번: 세 막대 (Java)

chaeunii 2023. 4. 1. 17:36

✅ 문제

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);
    }
}
반응형