본문 바로가기
acmicpc/Java

[JAVA] 백준 4153 직각삼각형

by 952_hi 2022. 3. 24.

 

https://www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

www.acmicpc.net

 


2++ 클래스 도전기

접근방식

 

1. 문제설명과 그림을 통해 피타고라스 정리를 통해 직각삼각형을 유추한다고 판단

2. 0,0,0 들어오면 끝내주고 배열로 받아드려 정렬하고 가장큰수를 대각선으로 잡아서 피타고라스 정리

3. 값이 서로 같으면 직각삼각형 아니면 직각삼각형 아님으로 판단

 

느낀점

3만개의 입력이 들어오는데 이부분을 system.out.println으로 하면 시간을 많으 잡아 먹을것 같다

그래서 버퍼드라이터와 스트링빌더 사용하여 빠르게 출력함.

변수명 짓기가 어렵다.. 

 

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class boj4153 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		StringTokenizer stz;
		
		while(true){
			stz = new StringTokenizer(br.readLine()," ");
			int comp[] = {Integer.parseInt(stz.nextToken()),Integer.parseInt(stz.nextToken()),Integer.parseInt(stz.nextToken())};
			
			int cnt=0;
			for(int i=0;i<3;i++) {
				if(comp[i]==0) cnt++;
			}
			
			if(cnt == 3) break;
			
			Arrays.sort(comp);
			
			int obj;
			int height;
			obj = (int)Math.sqrt(Math.pow(comp[2], 2));
			height = (int)Math.sqrt(Math.pow(comp[0], 2)+Math.pow(comp[1], 2));
			
			if(obj == height) sb.append("right").append("\n");
			else sb.append("wrong").append("\n");
		}
		sb.setLength(sb.length()-1);
		bw.write(sb.toString());
		bw.flush();
	}
}

 

'acmicpc > Java' 카테고리의 다른 글

[JAVA] 17404 RGB거리 2  (0) 2022.03.27
[Java] 백준 2164 카드2  (0) 2022.03.27
[JAVA] 2206 벽 부수고 이동하기  (0) 2022.03.24
[JAVA] 2805 나무 자르기  (0) 2022.03.23
[JAVA] 백준 10773 제로  (0) 2022.03.21

댓글