-
[백준/BOJ] 4153번 : 직각삼각형 (JAVA / 자바)백준 2022. 2. 4. 13:16
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/4153
4153번: 직각삼각형
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
www.acmicpc.net
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(JAVA / 자바) Scanner 와 Bufferedreader
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자
comain.tistory.com
풀이 방법
세변의 길이로 직각 삼각형인지를 구하려면 피타고라스의 정의를 사용한다.
테스트케이스의 수가 정해져있지 않기에 무한루프를 사용하고, 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