[백준/JAVA] 9366번 삼각형 분류

정은아·2024년 11월 24일

[알고리즘] 수학 모음

목록 보기
133/152
post-thumbnail

문제

백준 9366번 삼각형 분류

내 풀이 1 : 틀렸습니다.

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

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int num = Integer.parseInt(br.readLine());
        String answer = "";

        for (int i = 1; i <= num; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int numA = Integer.parseInt(st.nextToken());
            int numB = Integer.parseInt(st.nextToken());
            int numC = Integer.parseInt(st.nextToken());

            int max = Math.max(Math.max(numA, numB),numC);
            int sum = numA + numB + numC;

            if (numA == numB && numB == numC){
                answer = "equilateral";
            }else if(numA == numB){
                answer = "isosceles";
            }else if (numB == numC){
                answer = "isosceles";
            }else if(numA == numC){
                answer = "isosceles";
            }else if((sum - max > max) && (numA != numB) && (numA != numC)){
                answer = "scalene";
            }else{
                answer = "invalid!";
            }

            sb.append("Case #").append(i).append(": ").append(answer).append("\n");
        }

        System.out.println(sb.toString());

    }
}

내 풀이 2 : 정답

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

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int num = Integer.parseInt(br.readLine());
        String answer = "";

        for (int i = 1; i <= num; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int numA = Integer.parseInt(st.nextToken());
            int numB = Integer.parseInt(st.nextToken());
            int numC = Integer.parseInt(st.nextToken());

            int max = Math.max(Math.max(numA, numB),numC);
            int sum = numA + numB + numC;

            if (sum - max > max){
                if (numA == numB && numB == numC){
                    answer = "equilateral";
                }else if(numA == numB){
                    answer = "isosceles";
                }else if (numB == numC){
                    answer = "isosceles";
                }else if(numA == numC){
                    answer = "isosceles";
                }else if((numA != numB) && (numA != numC)){
                    answer = "scalene";
                }else{
                    answer = "invalid!";
                }
            }else{
                answer = "invalid!";
            }

            sb.append("Case #").append(i).append(": ").append(answer).append("\n");
        }

        System.out.println(sb.toString());

    }
}

느낀점

삼각형이 되기 위한 조건은 가장 긴 변보다 나머지 두 변의 합이 더 길어야 한다는 점이다.

a, b, c변이 있고 a변이 가장 길 때 b+c의 합이 a보다 커야하고

  • a+c > b
  • a+b > c
  • b+c > a
    의 조건도 맞아야 하지만 b+c > a의 조건이 맞으면 위의 두 조건은 무조건 맞기 때문에 하나만 써준다.

일단 삼각형이 유효한지 먼저 판별한 뒤 분기하는 것이었다.
조건을 쓸 때에 우선순위를 잘 판별하자!

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글