[BaekJoon] 10101번 - 삼각형 외우기 (java)

1. 문제

👉 문제 바로가기

- 조건

시간 제한 메모리 제한
1초 256MB


- 문제

창영이는 삼각형의 종류를 잘 구분하지 못한다. 따라서 프로그램을 이용해 이를 외우려고 한다.
삼각형의 세 각을 입력받은 다음,
- 세 각의 크기가 모두 60이면, Equilateral
- 세 각의 합이 180이고, 두 각이 같은 경우에는 Isosceles
- 세 각의 합이 180이고, 같은 각이 없는 경우에는 Scalene
- 세 각의 합이 180이 아닌 경우에는 Error
를 출력하는 프로그램을 작성하시오.



- 입력

총 3개의 줄에 걸쳐 삼각형의 각의 크기가 주어진다. 모든 정수는 0보다 크고, 180보다 작다.



- 출력

문제의 설명에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력한다.



- 예제

  입력      출력  
60
70
50
Scalene





2. 풀이


2개의 입력방식을 사용해서 결과를 출력한다.

  1. Scanner 클래스
  2. BufferedReader 클래스





2-1. Scanner 클래스

Math 클래스의 min() 을 사용해 최솟값을 구한다.

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();
        
        if(a + b + c != 180){ // 세 각의 합이 180이 아닌 경우
            System.out.println("Error");
        }else if(a == 60 && b == 60 && c == 60){ // 세 각의 크기가 모두 60인 경우
            System.out.println("Equilateral");
        }else if(a == b || b == c || c == a){ // 세 각의 합이 180이고, 두 각이 같은 경우
            System.out.println("Isosceles");
        }else{ // 세 각의 합이 180이고, 같은 각이 없는 경우
            System.out.println("Scalene");
        }
    }
}

위와같이 객체를 생성할 때, Scanner(System.in) 에서 System.in 은 입력한 값을 Byte 단위로 읽는 것을 뜻한다.

int형 데이터를 입력받기 위해 nextInt() 메서드를 사용한다.

if 조건문 을 사용해 조건에 따른 결과를 출력한다.
처음에 a + b + c != 180 조건을 먼저 명시했기 때문에, 그 외에는 세각의 합이 180 이라는 조건이 내포되어 있으므로 나머지 조건에 세 각의 합이 180이라는 조건을 명시하지 않아도 된다.

&& 는 AND 의 의미이고, || 는 OR 의 의미이다.



[여기서 잠깐!]

Scanner에 대해 더 자세히 알고싶다면 여기 를 클릭하세요
&& 와 || 연산자에 대해 더 자세히 알고싶다면 여기 를 클릭하세요




2-2. BufferedReader 클래스 사용

if 조건문 을 사용해 최솟값을 구한다.

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

public class Main{
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int a = Integer.parseInt(br.readLine());
        int b = Integer.parseInt(br.readLine());
        int c = Integer.parseInt(br.readLine());
        
        if(a + b + c != 180){ // 세 각의 합이 180이 아닌 경우
            System.out.println("Error");
        }else if(a == 60 && b == 60 && c == 60){ // 세 각의 크기가 모두 60인 경우
            System.out.println("Equilateral");
        }else if(a == b || b == c || c == a){ // 세 각의 합이 180이고, 두 각이 같은 경우
            System.out.println("Isosceles");
        }else{ // 세 각의 합이 180이고, 같은 각이 없는 경우
            System.out.println("Scalene");
        }
    }
}

readLine() 메서드는 입력받은 값을 한 줄 통째로 읽어 String 으로 반환한다.

Integer.parseInt()을 사용해 String형을 int형으로 변환시켜준다.



[여기서 잠깐!]

BufferedReader 클래스에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.





3. Scanner VS BufferedReader 성능 비교

image

입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.





관련 페이지

Categories:

Updated:

Leave a comment