[Java][백준] #5073 - 삼각형과 세 변

배수연·2024년 5월 17일

algorithm

목록 보기
30/45

🔗 백준 5073 - 삼각형과 세 변

문제

알고리즘 분류

  • 수학
  • 구현
  • 기하학

IDEA

  • 삼각형인지 아닌지를 가장 먼저 판별해야하는 조건문의 순서가 중요했다.
  • 다만 나는 조건문 순서가 아니라 연산자때문에 더 헤맸는데, 질문 게시판에서 질문 및 반례를 찾아 해결했다.
    → Integer는 ==가 아니라 equals로 비교해야한다.

풀이

1. 입력 및 수열 저장

  • 배열[3] 생성 후 저장
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Integer[] arr = new Integer[3];
        while(true){
            StringTokenizer st = new StringTokenizer(br.readLine());
            arr[0] = Integer.parseInt(st.nextToken());
            arr[1] = Integer.parseInt(st.nextToken());
            arr[2] = Integer.parseInt(st.nextToken());
            if(arr[0] == 0) break;
            System.out.println(triangle(arr));
        }
    }

2. 조건 판별 함수 구현

  • 삼각형인지 아닌지를 판별하는 조건문이 가장 우선이어야 한다.
    - 그 다음, 만약 삼각형이라면 세 변이 같은지/두 변이 같은지/모두 다른지를 판별한다.

  • 배열을 정렬했으므로 arr[0]<arr[1]<arr[2]

    public static String triangle(Integer[] arr) {
        Arrays.sort(arr);
        //삼각형이 아닌 경우
        //가장 긴 변의 길이 < 나머지 두 변의 길이의 합 --> 삼각형임
        //가장 긴 변의 길이 >= 나머지 두 변의 길이의 합 --> 삼각형이 아님
        if(arr[2] >= (arr[0] + arr[1]))
            return "Invalid";
        else if (arr[0].equals(arr[1]) && arr[1].equals(arr[2]))
            return "Equilateral";
        else if (arr[0].equals(arr[1]) || arr[1].equals(arr[2]) || arr[0].equals(arr[2]))
            return "Isosceles";
        else return "Scalene";
    }

전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Integer[] arr = new Integer[3];
        while(true){
            StringTokenizer st = new StringTokenizer(br.readLine());
            arr[0] = Integer.parseInt(st.nextToken());
            arr[1] = Integer.parseInt(st.nextToken());
            arr[2] = Integer.parseInt(st.nextToken());
            if(arr[0] == 0) break;
            System.out.println(triangle(arr));
        }
    }
    public static String triangle(Integer[] arr) {
        Arrays.sort(arr);
        //삼각형이 아닌 경우
        //가장 긴 변의 길이 < 나머지 두 변의 길이의 합 --> 삼각형임
        //가장 긴 변의 길이 >= 나머지 두 변의 길이의 합 --> 삼각형이 아님
        if(arr[2] >= (arr[0] + arr[1]))
            return "Invalid";
        else if (arr[0].equals(arr[1]) && arr[1].equals(arr[2]))
            return "Equilateral";
        else if (arr[0].equals(arr[1]) || arr[1].equals(arr[2]) || arr[0].equals(arr[2]))
            return "Isosceles";
        else return "Scalene";
    }
}

0개의 댓글