열심히 끝까지

[코딩 문제] - 6/7~6/10 시간, 최대공약수, 최소공배수 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)

[코딩 문제] - 6/7~6/10 시간, 최대공약수, 최소공배수

노유림 2022. 6. 10. 17:07

추가문제(6/7)

int a = 5;
int b = --a;
int c = a++ - b--;

syso(a);
syso(b);
syso(++c);

디버깅표
a            b             c
----------------------------
5
4            4
                            0
5            3
                            1

syso(a); // 5
syso(b); // 3
syso(c); // 1
-------------------강사님 방법(6/8 풀이)

a       b       c
--------------------
5
4       4       0
5       3
                 1
--------------------------------------------------------
과제(6/8)
1시간 넘어가면 문제가 존재..... 잘한다 하면 30분 미만(문제 30분 이상)
과제문제)
시간 입력 : 4 // 1~12시
분 입력 : 50 // 0~59분
/// 잘못된 입력 -> 종료

4시 50분의 1시간 20분 전 시간은
3시 30분 입니다.

3시 10분의 1시간 20분 전 시간은
1시 50분 입니다.

1시 10분의 1시간 20분 전 시간은
11시 50분 입니다.

풀어본 결과 6/9일자에 해설 올라감
package class08;

import java.util.Scanner;

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

             System.out.print("시간을 입력(1~12시) : ");
             int hour = sc.nextInt();

             if(hour < 1 || hour > 12 ){
                   System.out.println("종료");
             }
             else {
                   System.out.print("분을 입력(0~59분) : ");
                   int minute = sc.nextInt();

                   if( minute < 0 || minute > 59) {
                         System.out.println("종료");
                   }
                   else {

                         int time = (hour * 60) + minute;

                         if(time < 80) {
                               time += 720;
                         }

                         int reshour = (time - 80)/60;
                         int resminute = (time - 80)%60;

                         System.out.println(hour + "시 " + minute + "분의 1시간 20분 전 

                                                       시간은 " + reshour + "시 " + resminute + "분입니다.");
                   }
             }
       }
}
-----------------------강사님 방법(6/9 풀이)
package class01;

import java.util.Scanner;

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

             System.out.print("시간 : ");
             int h = sc.nextInt();
             System.out.print("분 : ");
             int m = sc.nextInt();

             if((h < 1 || 12 < h)  ||  (m < 0 || 59 < m)) {
                   // 유효성 체크!
                   System.out.println("시간 범위 : 1~12");
                   System.out.println("분 범위 : 0~59");
             }
             else {
                   System.out.println(h + "시 " + m + "분의 1시간 20분 전 시간은");
                   h-=1;
                   m-=20;
                   if(m < 0) {
                         m += 60;
                         h--; 
                   }
                   if(h < 1) { // h값을 제대로 정하려면 정해놓은 이후로 건드리면 안된다.
                         h += 12;
                   }

                   System.out.println(h + "시 " + m + "분입니다.");
             }
             // 검사 == 테스트
             // 1) 경계값 검사 : 경계가 될 만한 값을 일부러 넣어서 검사해보기
       }
}

-------------------------------------------------------------
과제(6/9)
정수 두개 입력
정수1 : 10
정수2 : 12

10와(과) 12의 
최대공약수는 2이고,
최소공배수는 60입니다.

정수1 : 16
정수2 : 12

12와(과) 16의 
최대공약수는 4이고,
최소공배수는 48입니다.

-----------
package class07;

import java.util.Scanner;

public class Test1001 {
       public static void main(String[] args) {

             Scanner sc = new Scanner(System.in);


             System.out.print("정수 1 입력 : ");
             int n1 = sc.nextInt();
             System.out.print("정수 2 입력 : ");
             int n2 = sc.nextInt();

             int tmp;
             if(n1 > n2) {
                   tmp = n1;
                   n1 = n2;
                   n2 = tmp;
             }

             int gd = 0;
             int lm = 0;
             for(int i = n1; i > 1; i--) {
                   if(n1 % i == 0 && n2 % i == 0) {
                         gd = i;
                         lm = i * (n1 / i) * (n2 / i);
                         break;
                   }
             }
             System.out.println(n1 + "와(과) " + n2 + "의\n최대공약수는 " + gd + "이고,"
                                           + " \n최소공배수는 " + lm + "입니다.");

       }
}
----------------------------------강사님 방법(6/10 풀이)
방법1
package class01;

import java.util.Scanner;

public class Test01 {
       public static void main(String[] args) {
             Scanner sc = new Scanner(System.in);
             System.out.print("정수 : ");
             int a = sc.nextInt();
             System.out.print("정수 : ");
             int b = sc.nextInt();

             if(a>b) {
                   int tmp = a;
                   a = b;
                   b = tmp;
             }

             int i;
             for(i = a; i >= 1; i--) {
                   if(a % i ==0 && b % i == 0) {
                         break;
                   }
             }

             System.out.println(a + "와(과) " + b + "의 ");
             System.out.println("최대공약수는 " + i + "이고");
             System.out.println("최소공배수는 " + (a * b / i) + "입니다.");
       } 
}
-------------
방법2
import java.util.Scanner;

public class Test01 {
       public static void main(String[] args) {
             Scanner sc = new Scanner(System.in);
             System.out.print("정수 : ");
             int a = sc.nextInt();
             System.out.print("정수 : ");
             int b = sc.nextInt();

             if(a>b) {
                   int tmp = a;
                   a = b;
                   b = tmp;
             }

             for(int i = a; i >= 1; i--) {
                   if(a % i ==0 && b % i == 0) {
                          System.out.println(a + "와(과) " + b + "의 ");
                         System.out.println("최대공약수는 " + i + "이고");
                         System.out.println("최소공배수는 " + (a * b / i) + "입니다.");
                         break;
                   }
             }
       } 
}
--------------------------------
디버깅표
a      b       i         i>=1
--------------------------
4      8       4           T  << 바로 break; 중간문을 안만남