본문 바로가기

diary/codestates (be39)

05/06/22 [pair: java: 조건문] there is jam

isPythagorean

삼각형의 세 변을 입력받아 직각 삼각형이면 true, 아니면 false 반환하기

Pair)

 

public boolean isPythagorean(int side1, int side2, int side3) {
    int temp, maxSide;
    temp = (side1>side2) ? side1 : side2;
    maxSide = (temp>side3) ? temp : side3;

    if(2*Math.pow(maxSide, 2) == Math.pow(side1, 2) + Math.pow(side2, 2) + Math.pow(side3, 2)){
        return true;
    } else{
        return false;
    }
}

 

세 변을 가지고 직각 삼각형인지 확인하려면 피타고라스의 정리로 가장 긴 변의 제곱이 다른 두 변의 제곱의 합과 같으면 된다. 여기서 페어님과 함께 삽질한(.....) 점이 그럼 저희가 제일 긴 변이 뭔지 먼저 알아야겠네요.......? 였다. 그래서 등장한 게 temp와 maxSide 변수. 입력받은 side1, side2, side3를 비교해서 가장 큰 변을 찾고 싶었다. 

 

temp = (side1>side2) ? side1 : side2;
maxSide = (temp>side3) ? temp : side3;

 

그런데 막상 제일 큰 변이 뭔지는 찾았는데 이제 직각 삼각형인지를 확인해야 하는데 확인을 못한다. 그래서 아..... for문으로 해서 안에서 구해야 되나요.......? 하다가 앗 그냥 양변에 maxSide 제곱을 더해버려요! 로 해결했다. a^2 = b^2 + c^2에서 a^2 + a^2 = a^2 + b^2 + c^2로 해결한 셈........ ㅎㅎ

 

2*Math.pow(maxSide, 2) == Math.pow(side1, 2) + Math.pow(side2, 2) + Math.pow(side3, 2))

 

이렇게 완성하고 좋아했는데 reference 코드를 보고서는 웃을 수 없었다 ㅎㅎ...ㅠ 가장 긴 변이 뭔지 우리는 알아야 할 필요가 없었다는 슬픈 사실을 알게 됐기 때문에..... ㅠ 저희만 긴 변 구하기에 진심이었죠?

 

 

개선 방안

 

중요한 건 가장 긴 변이 무엇이냐가 아니다. 어떻게든 한 변의 제곱이 나머지 두 변의 제곱의 합과 같기만 하면 걔는 직각 삼각형이다. -> or로 조건을 걸면 된다.

 

Math.pow(side1, 2)==Math.pow(side2, 2)+Math.pow(side3, 2) || 
Math.pow(side2, 2)==Math.pow(side1, 2)+Math.pow(side3, 2) || 
Math.pow(side3, 2)==Math.pow(side1, 2)+Math.pow(side2, 2)

 

이렇게 if 조건을 걸어 true, false를 return하게 하면 앞에 한 생고생을 할 필요가 없다! 삽질 끝에 조건 달성을 위해 쓸데없는 부분까지 알아야 할 필요가 없다는 깨달음을 얻었다..... ㅎㅎ


Math.pow(double a, double b)

a의 b 제곱 값을 반환한다.

주의할 점은 int 값을 넣어줘도 double 값을 반환한다는 것. -> 결과값을 int로 얻고 싶다면 앞에 (int)를 붙여 수동 타입 변환을 해주어야 한다.

(reference)

 

Math pow() method in Java with Example - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org