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)
'diary > codestates (be39)' 카테고리의 다른 글
05/06/22 [pair: java: 반복문: 2] if-elseif-for-if-.... (0) | 2022.05.07 |
---|---|
05/06/22 [pair: java: 반복문: 1] /와 % 연산자는 소중해,, (0) | 2022.05.06 |
05/04/22 [2/2] [pair: java: 변수, 타입, 문자열] 갑분 메서드요? (0) | 2022.05.05 |
05/04/22 [1/2] [Java] 자바 자바 자바 기초 떼기 (0) | 2022.05.04 |
05/03/22 [Git + pair programming] 우당탕탕탕탕탕탕탕 (0) | 2022.05.03 |