문제 해석
-> 문제는 간단하면서 쉬운 문제이다.
작성한 코드
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
느낀점