렝무식
[백준 4153번] 직각삼각형 (JAVA) 본문
BOJ - [4153] 직각삼각형
🖍 입력으로 세 변의 길이가 주어지면 해당 변으로 이루어지는 삼각형이 직각삼각형인지 판별하는 문제
(link) 4153 직각삼각형
[풀이 과정]
중학교 수준의 수학 문제. 요즘은 초등학교 고학년들이 알지도 모른다.
내가 아무리 수포자라지만 피타고라스 정리를 모를 정도는 아니다.
지금 이 글을 보고 있는 사람이라면 이정도 수학 지식을 모를리가 없기 때문에 바로 코드로 구현해보겠다.
우선 세 변의 길이를 저장하기 위해 크기 3의 배열을 선언한다.
그리고 이 문제에서는 테스트 케이스 개수가 주어지지 않았기 때문에 while문을 이용하여 0 0 0 이 주어질 때까지 반복하게끔 한다. (do while문을 써도 괜찮을까? 일단 나는 while문의 조건을 true로 설정한 뒤 while구문 안쪽에서 종료 조건을 제시했다)
반복문 안 쪽에서 세 변의 길이로 배열을 채운 뒤 배열을 정렬해준다. 왜냐하면 .. 작은 두 변의 제곱 길이 합이 제일 긴 변의 제곱 길이와 같아야하기 때문에 크기대로 정렬해주면 편하다.
그리고 조건문을 통해서 종료 조건을 제시한다. 배열의 어떤 값이라도 0이 들어오면 바로 반복문이 종료되도록 한다.
각 변의 제곱 길이를 변수에 넣는다. 이때 사용하는 메소드는 Math.pow()
이며 주의할 점은 반환값이 double형이라서 int로 형변환을 해주어야 int 변수에 저장된다는 점이다.
제곱한 값들이 각각 저장되었으면 거의 다 됐다.
조건문으로 x + y = z인지 확인하여 직각삼각형인지 아닌지 판별하면 끝이다.
[Pseudocode]
1. 세 변의 길이를 저장할 배열 array 선언
2. while
3. for i=0 부터 3까지
4. array[i]에 입력 받아 저장
5. 배열 오름차순 정렬
6. if(array[0] == 0)
7. break
8. x = array[0]^2
9. y = array[1]^2
10. z = array[2]^2
11. if(x+y=z)
12. right 출력
13. else
14. wrong 출력
[Code]
import java.util.*;
/**
* 백준 4153번
* 직각삼각형
* 분류 : 수학, 기하학
*/
public class Problem8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] array = new int[3]; // 세 변의 길이 저장
// 0 0 0이 입력될 때까지 반복
while (true) {
for(int i=0 ; i<3 ; i++)
array[i] = input.nextInt();
Arrays.sort(array); // 배열을 오름차순으로 정렬
if(array[0] == 0) // 종료 조건
break;
// 피타고라스 정리 사용
int x = (int)Math.pow(array[0], 2);
int y = (int)Math.pow(array[1], 2);
int z = (int)Math.pow(array[2], 2);
if(x + y == z)
System.out.println("right");
else
System.out.println("wrong");
}
input.close();
}
}
[Result]
(2021.07.20 풀이분)
첫번째 제출에서는 배열 정렬을 안했음 바보
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 10872번] 팩토리얼 (JAVA) (1) | 2023.01.13 |
---|---|
[백준 10829번] 이진수 변환 (JAVA) (0) | 2023.01.13 |
[백준 3009번] 네 번째 점 (JAVA) (0) | 2023.01.12 |
[백준 2869번] 달팽이는 올라가고 싶다 (JAVA) (0) | 2023.01.12 |
[백준 1316번] 그룹 단어 체커 (JAVA) (0) | 2023.01.12 |