-
4153번 - 직각삼각형알고리즘/백준 2023. 3. 7. 09:32
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); while(true) { StringTokenizer st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int max = a; if(a == 0) { break; } int b = Integer.parseInt(st.nextToken()); int line1 = Math.min(max, b); max = Math.max(max, b); int c = Integer.parseInt(st.nextToken()); int line2 = Math.min(max, c); max = Math.max(max, c); if(Math.pow(line1, 2) + Math.pow(line2, 2) == Math.pow(max, 2)) { sb.append("right\n"); } else { sb.append("wrong\n"); } } System.out.println(sb); br.close(); } }
문제 자체는 피타고라스의 정리를 통해 해결할 수 있지만 걸리는 부분이 두 가지 있습니다.
1. 어떻게 0,0,0이 들어오면 멈출 것인가
2. 가장 긴 선분과 나머지를 어떻게 효율적으로 구분하는가
각각은 다음과 같이 해결할 수 있습니다.
1. while(true)를 통해 무한루프를 돌다가 한 변의 길이로 0이 들어오면 break한다. (한 변의 길이가 0인 이상 삼각형이 될 수는 없습니다.)
2. 처음에 들어오는 수를 max로 놓고 두번째 수와 비교하여 더 작은 수를 line1, 큰 수를 max(순서가 바뀌면 max에 다른 값이 들어가서 오답이 나옵니다.)로 놓고 마지막으로 세번째 수와 비교하여 더 작은 수를 line2, 큰 수를 max로 놓으면 피타고라스 정리를 쓸 수 있도록 변수가 정리됩니다.
이후 if문을 통해 피타고라스 정리를 만족하는 지 검사하고 출력하면 끝입니다. 이 때 출력해야 하는 가짓수가 많기 때문에 자바의 경우 반드시 StringBuilder를 사용해 문자열을 계속 만들어나가다가 break 이후 한 번에 출력해야 합니다.
'알고리즘 > 백준' 카테고리의 다른 글
10989번 - 수 정렬하기 3 (0) 2023.03.11 10250번 - ACM 호텔 (0) 2023.03.08 2869번 - 달팽이는 올라가고 싶다 (0) 2023.03.05 1461번 : 도서관 (0) 2023.03.04 2775번 - 부녀회장이 될테야 (0) 2023.03.02