코딩테스트

[백준/JAVA] 4153 직각삼각형

코드사냥꾼 2019. 11. 8. 21:56

1. 문제

 

2. 풀이

** 단 , 입력받은 세 개의 숫자를 비교하여 큰 수를 빗변으로 설정해 풀어야 하는 조건을 새로 추가하여 풀었다. **

-- MINE🔥

public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);

		while (true) {

			int max = 0;

			System.out.print("숫자 입력 :");
			int a = sc.nextInt();
			int b = sc.nextInt();
			int c = sc.nextInt();

if ((a > 0 && a <= 30000) && (b > 0 && b <= 30000) && (c > 0 && c <= 30000)) {

				if (a > b && a > c) {
					max = a;
					if ((b * b) + (c * c) == max * max) {
						System.out.println("right");
					} else {
						System.out.println("wrong");
					}
				} else if (b > a && b > c) {
					max = b;
					if ((a * a) + (c * c) == max * max) {
						System.out.println("right");
					} else {
						System.out.println("wrong");
					}
				} else if (c > a && c > b) {
					max = c;
					if ((a * a) + (b * b) == max * max) {
						System.out.println("right");
					} else {
						System.out.println("wrong");
					}
				}
			} else {
				break;
			}
		}
	}

-- OTHER WAY 💡 : 배열을 이용한 풀이

public static void main(String[] args) {

      while (true) {
         int a[] = new int[3];
         Scanner sc = new Scanner(System.in);
         System.out.print("각변의 길이 3가지 입력 :");
         a[0] = sc.nextInt();
         a[1] = sc.nextInt();
         a[2] = sc.nextInt();

         if (a[0] == 0 && a[1] == 0 && a[2] == 0)
            break;

         for (int i = 0; i < 3; i++) {
            if (a[i] < 0 || a[i] > 30000) {
               System.out.println("30000미만의 양수를 입력하세요");
               break;
            } else {
               Arrays.sort(a);

if ((a[0] * a[0]) + (a[1] * a[1]) == (a[2] * a[2]) && (a[0] * a[1] * a[2]) != 0) {
                  System.out.println("right");
                  continue;

               } else {
                  System.out.println("wrong");
                  continue;
               }
            }
         }
      }
   }

-- OTHER WAY 2 💡 : 메소드 호출을 사용한 풀이

public class day2_2 {
   
   private static int max;
   private static Scanner sc = new Scanner(System.in);

   public static void main(String[] args) {
      
      while(true) {
         //제일 중요 -> 3개의 숫자를 받을 때 처음에 반드시 MAX 0 으로 초기화
         max = 0;
      
         //각각의 변수 다 max() 메소드 이용하여 초기화
         System.out.print("INPUT FIRST NUBMER : ");
         int x = max();
         
         System.out.print("INPUT SECOND NUBMER : ");
         int y = max();
         
         System.out.print("INPUT THIRD NUBMER : ");
         int z = max();
         
         //max가 0인 경우 종료
         if(max == 0) {
            System.exit(0);
         } 
         //그 이외의 경우 직각삼각형 여부 판단
         else {
         
            //x가 최대인 경우
            if(x == max) {
      
               if(Math.pow(x, 2) == Math.pow(y,2) + Math.pow(z,2)) {
                  System.out.println("right");
               }
               else {
                  System.out.println("wrong");
               }
               
            } 
            //y가 최대인 경우
            else if(y == max) {
               
               if(Math.pow(y, 2) == Math.pow(x,2) + Math.pow(z,2)) {
                  System.out.println("right");
               }
               else {
                  System.out.println("wrong");
               }
               
            } 
            //z가 최대인 경우
            else {
               
               if(Math.pow(z, 2) == Math.pow(x,2) + Math.pow(y,2)) {
                  System.out.println("right");
               }
               else {
                  System.out.println("wrong");
               }   
               
            }
         }
      }
   }
   
   //max method
   public static int max() {
      
      int num = sc.nextInt();
      
      //범위 이외의 것은 계속 받기
      while(true) {
         
         if(num < 0 || num >= 30001) {
               
            System.out.print("INPUT NUMBER REPLAY : ");               
            num = sc.nextInt();               
                  
         } 
         //아닌 경우 num 지정
         else   {
            break;
         }
      }
      
      //max 지정
      if(num > max) {
         max = num;
      }
      
      //num 반환
      return num;      
   }

}

-- OTHER WAY 3 💡 : ArrayList 사용한 풀이

public static void arrlist() {
      Scanner sc = new Scanner(System.in);
      
      ArrayList<Integer> alist = new ArrayList<Integer>();
      ///alist.size()
      
      for (int i = 0; i < 3; i++) {
         System.out.println("정수를 입력하세요.");
         
         int a = sc.nextInt();
         
         if (a >= 0 && a <= 30000) {
            alist.add(a);
         }
         
         Collections.sort(alist);
         
      }
      
     if (alist.get(0) * alist.get(0) + alist.get(1) * alist.get(1) 
         == alist.get(2) * alist.get(2)) {
             System.out.println("right");
         } else {
         System.out.println("wrong");
      }
   }