-
[백준/BOJ] 4153번 : 직각삼각형 (JAVA / 자바)백준 2022. 2. 4. 13:16
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/4153
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
세변의 길이로 직각 삼각형인지를 구하려면 피타고라스의 정의를 사용한다.
테스트케이스의 수가 정해져있지 않기에 무한루프를 사용하고, 0 0 0이 입력되었을때 무한루프를 종료한다.
피타고라스의 정의를 사용하여 조건문을 만들어 right 또는 wrong을 출력한다.
입력된 3개의 값의 크기가 다르기 때문에 배열을 사용해 3개의 값을 저장하고 정렬해서 작은 두 수의 제곱과 큰 수의 제곱이 같은지 여부를 확인 하고 출력하거나, 변수로 3개를 받고 A B C면 A + B = C / A + C = B / B + C = A 인 조건을 걸고 right을 출력한다.
두가지 방법을 제시 했다.
1. 배열을 사용한 방법
2. 변수만을 사용한 방법
두가지 다 해보겠다.
-풀이-
첫번째 방법
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true) { StringTokenizer st = new StringTokenizer(br.readLine()); //값이 3개이기 때문에 배열의 크기는 3 int[] arr = new int[3]; arr[0] = Integer.parseInt(st.nextToken()); arr[1] = Integer.parseInt(st.nextToken()); arr[2] = Integer.parseInt(st.nextToken()); //정렬 Arrays.sort(arr); //정렬된 배열에서 작은수부터 제곱해서 각 변수에 저장, pow는 실수형으로 저장되기에 변수는 double형 double A = Math.pow(arr[0], 2); double B = Math.pow(arr[1], 2); double C = Math.pow(arr[2], 2); //무한루프 탈출 입력값 if(A == 0 && B == 0 && C == 0) { break; } //피타고라스 정의 if(A + B == C) { System.out.println("right"); }else { System.out.println("wrong"); } } } }
두번째 방법
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)); while(true) { StringTokenizer st = new StringTokenizer(br.readLine()); int A = Integer.parseInt(st.nextToken()); int B = Integer.parseInt(st.nextToken()); int C = Integer.parseInt(st.nextToken()); if(A == 0 && B == 0 && C == 0) { break; } //각 수를 제곡해서 저장 double Apow = Math.pow(A, 2); double Bpow = Math.pow(B, 2); double Cpow = Math.pow(C, 2); //피타고라스 정의 if(Apow + Bpow == Cpow) { System.out.println("right"); }else if(Apow + Cpow == Bpow){ System.out.println("right"); }else if(Bpow + Cpow == Apow) { System.out.println("right"); }else { System.out.println("wrong"); } } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠다.
'백준' 카테고리의 다른 글
[백준/BOJ] 4493번 : 가위 바위 보? (JAVA / 자바) (0) 2022.02.04 [백준/BOJ] 4388번 : 받아올림 (JAVA / 자바) (0) 2022.02.04 [백준/BOJ] 3029번 : 경고 (JAVA / 자바) (0) 2022.02.03 [백준/BOJ] 4101번 : 크냐? (JAVA / 자바) (0) 2022.02.03 [백준/BOJ] 3460번 : 이진수 (JAVA / 자바) (0) 2022.02.03