문제
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
입력
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
출력
각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
풀이1
1) 각각의 값을 제곱해서 저장한다
2) 저장하는 동안 최대값을 구해서 max변수에 저장한다
3) 배열에서 max와 같은 값을 가지는 값을 찾고 맨 앞으로 이동한다(arr[0])
4) 맨 앞 index와 나머지 index들의 관계식으로 조건문을 만든다
같으면 'right', 틀리면 'wrong'을 출력한다
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int max = 0;
int[] arr = new int[3];
while(true) {
max =0;
st = new StringTokenizer(br.readLine()," ");
for(int i =0; i<3; i++) {
arr[i] = (int) Math.pow(Integer.parseInt(st.nextToken()),2);
if(arr[i]>max) {
max = arr[i];
}
//값을 받는 동시에 제곱해주고 최대값을 탐색한다
}
if(arr[0]==0 && arr[1]==0 && arr[2]==0) {
break;
}
// 0 0 0을 받으면 종료한다
for(int i =0; i<3; i++) {
int temp = 0;
if(arr[i]==max) {
temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
}
//값을 일시적으로 받아주는 temp에 저장하고 최대값을 맨 앞으로 옮긴다
}
if(arr[0] != arr[1]+arr[2]) {
System.out.println("wrong");
} if(arr[0] == arr[1]+arr[2]) {
System.out.println("right");
}
}
}
}
풀이2
0 0 0을 입력받기 전까지는 반복문이 지속된다 → 일단 while(true) { } 안에서 지속하다가 입력값을 0 0 0 받으면 break;
Scanner을 통해 값들을 배열에 넣어준다 → 그후 배열을 Arrays.sort()로 정렬해준다
정렬했다면 arr의 3개의 index는 index[0] <= index[1] <= index[2] 인 상태이므로 2번 index는 자동적으로 최대값이 된다
즉 index[2]==0인 순간 index[1]과 index[2]도 0이 되는 것이다
나머지는 if문을 통해 피타고라스 정리가 성립하는지 확인해준다
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] arr=new int[3];
while(true) {
for(int i=0;i<3;i++) {
arr[i]=sc.nextInt();
}
Arrays.sort(arr);
if(arr[2]==0) break;
else if(arr[2]*arr[2]==arr[0]*arr[0]+arr[1]*arr[1]) {
System.out.println("right");
}else System.out.println("wrong");
}
}}
숏코딩
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] arr=new int[3];
while(true) {
for(int i=0;i<3;i++)arr[i]=sc.nextInt();
Arrays.sort(arr);
if(arr[2]==0) break;
else System.out.println(arr[2]*arr[2]==arr[0]*arr[0]+arr[1]*arr[1]?"right":"wrong");
}}}
'Study > Baekjoon' 카테고리의 다른 글
Baekjoon1002: 터렛, 낮은 정답률의 이유 (0) | 2021.10.14 |
---|---|
Baekjoon3053: 택시 기하학 (0) | 2021.10.14 |
Baekjoon3009: 네 번째 점 (0) | 2021.10.14 |
Baekjoon1085: 직사각형에서 탈출 (0) | 2021.10.14 |
Baekjoon9020*: 골드바흐의 추측, 여러 방법으로 풀기 (0) | 2021.10.14 |