
문제 해석
-> 문제는 간단하면서 쉬운 문제이다.
작성한 코드
import java.io.*;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int angle[] = new int[3]; //각도를 저장하는 배열
        int wholeangle = 0;
        for(int i = 0; i < 3; i++){
            angle[i] = Integer.parseInt(br.readLine());
            wholeangle += angle[i];
        }
        br.close();
        if(wholeangle != 180){
            bw.write("Error");
        }else{
            int[] distinct = removeDuplicate(angle);
            if(distinct.length == 1){ //세각이 전부 같을 경우(중복값을 제거한 후 1개가 남은거니까)
                bw.write("Equilateral");
            }else if(distinct.length == 2){//세각 중 두각이 같을 경우(중복값을 제거한 후 2개가 남은거니까)
                bw.write("Isosceles");
            }else if(distinct.length == 3){ //세각이 전부 다를 경우(중복값을 제거해도 3개가 남은거니까)
                bw.write("Scalene");
            }
        }
        bw.flush();
        bw.close();
    }
	//배열의 중복값을 삭제하여 배열을 반환해주는 메서드
    public static int[] removeDuplicate(int[] arr) {
        //받은 배열을 크기만큼 반복문을 돌림(forEach) = Stream()
        // distinct() 메소드는 스트림에서 중복되는 요소들을 모두 제거해주고 새로운 스트림을 반환
        //  List 컨테이너의 인스턴스를 배열(array)로 만드는것이 'toArray' 메서드
        return Arrays.stream(arr).distinct().toArray();
    }
}
결과

참고한 코드2
import java.io.*;
import java.util.ArrayList;
import java.util.HashSet;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        ArrayList<Integer> angle = new ArrayList<>();
        angle.add(Integer.parseInt(br.readLine()));
        angle.add(Integer.parseInt(br.readLine()));
        angle.add(Integer.parseInt(br.readLine()));
        br.close();
        if((angle.get(0) + angle.get(1) + angle.get(2))== 180){ //세각이 180일 경우
            HashSet data = new HashSet(angle);
            if(data.size() == 1){
                bw.write("Equilateral");
            }else if(data.size() == 2){
                bw.write("Isosceles");
            }else if(data.size() == 3){
                bw.write("Scalene");
            }
        }else{ //세각이 180아닌 경우
            bw.write("Error");
        }
        bw.flush();
        bw.close();
    }
}
- HashSet은?
 
- Set 인터페이스에서 지원하는 구현 클래스(Set은 주머니 형태로 비선형 구조이기에 저장 순서가 없으며 그렇기에 인덱스도 존재X)
 - 순서대로 입력되지 않고, 일정하게 유지되지 않는게 특징
 - null값도 요소로 허용
 - 중복을 허용하지 않는다
 - HashSet은 객체를 저장하기 전에 먼저 객체의 hashcode()메서드를 호출해서 해시코드를 얻어낸 다음 저장되어 있는 객체들의 해시 코드와 비교한 후 해시 코드가 잇다면 equals()메서드를 사용하여 두 객체를 비교한다.
 - 이 과정에 true가 나온다면 동일한 객체로 판단하고 중복저장을 하지 않는다.
 
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        
        //객체 새로 생성
        String a = new String("Hello");
        String b = new String("Hello");
        System.out.println(a == b); //false
        System.out.println(a.hashCode());
        System.out.println(b.hashCode());
        //기본적으로 String은 HashMap 자료구조형태로 중복된 데이터면 저장되지 않고 동일한 주소를 참조
        // new연산자를 안쓸 경우 
        String c = "Hello";
        String d = "Hello";
        System.out.println(c == d);
        System.out.println(c.hashCode());
        System.out.println(d.hashCode());
    }
}
결과2

느낀점