ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.