ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (백준) 2908번 '상수'
    문제 2023. 8. 6. 14:54

    import java.util.Scanner;
    
    public class Main{
    	public static void main(String[] args){
        	Scanner sc = new Scanner(System.in);
            
            int A = sc.nextInt();
            int B = sc.nextInt();
            
            int reversed_A = reverseNumber(A);
            int reversed_B = reverseNumber(B);
            
            int max = (reversed_A > reversed_B) ? reversed_A : reversed_B;
            System.out.println(max);
    
            scanner.close();
        }
    
        public static int reverseNumber(int n) {
            int reversed = 0;
            while (n > 0) {
                int digit = n % 10;
                reversed = reversed * 10 + digit;
                n /= 10;
            }
            return reversed;
        }
    }

     

     

    ✔️reverseNumber 메서드

    public static int reverseNumber(int n) {
        // 세 자리 수를 거꾸로 뒤집어 반환
        int reversed = 0;
        while (n > 0) {
            int digit = n % 10;     // 일의 자리 숫자 구하기
            reversed = reversed * 10 + digit;  // 기존 결과를 10 곱한 후 일의 자리 숫자 더하기
            n /= 10;               // 다음 자릿수로 이동
        }
        return reversed;
    }

    1. int digit = n % 10;

    -> n을 10으로 나눈 나머지를 계산하여 digit 변수에 저장한다.

    digit 변수에는 n의 일의 자리 숫자가 저장된다.

     

    2. reversed = reversed * 10 + digit;

    -> 뒤집힌 결과 reversed에 10을 곱한 후 digit 값을 더하여 숫자를 뒤집는다.

    이 연산은 일의 자리 숫자를 더하고, 십의 자리 숫자가 되도록 뒤집는 작업을 한다.

    예를 들어, reversed가 0이고 digit이 3일 때, reversed = 0 * 10 + 3 이므로 reversed는 3이 된다.

    이후 digit 이 7일때, reversed = 3 * 10 + 7 이므로 reversed는 37이 된다.

     

    3. n /= 10;

    n을 10으로 나누어 다음 자릿수로 이동한다. (n = n / 10;)

    이를 통해 다음 반복에서 일의 자리 숫자를 다시 구할 수 있다.

    예를 들어, n이 378이라면 n /= 10을 수행하면 n은 37이 된다.

     

     

    4. 반복이 끝나고 n이 0보다 작아지면(일의 자리 숫자가 없어지면) 반복문이 종료된다.

     

     

    예를 들어, 378을 거꾸로 뒤집는 과정이다.

     

    1) 초기상태: n = 378, reversed = 0

     

    2) 8을 얻고 뒤집은 결과에 추가

    • digit = n % 10 (일의 자리 숫자인 8을 얻음)

    • reversed = reversed * 10 + digit (기존 결과인 0이 8을 더해줌)

    • 결과: reversed = 0 * 10 + 8 = 8, n = n / 10 (다음 자릿수로 이동) -> n = 37

     

    3) 7을 얻고 뒤집은 결과에 추가

    • digit = n % 10 (일의 자리 숫자인 7을 얻음)

    • reversed = reversed * 10 + digit (기존 결과인 8이 7을 더해줌)

    • 결과: reversed = 8 * 10 + 7 = 87, n = n / 10 (다음 자릿수로 이동) -> n = 3

     

    4. 3을 얻고 뒤집은 결과에 추가

    • digit = n % 10 (일의 자리 숫자인 3을 얻음)

    • reversed = reversed * 10 + digit (기존 결과인 87이 3을 더해줌)

    • 결과: reversed = 87* 10 + 3 = 873, n = n / 10 (다음 자릿수로 이동) -> n = 0

     

    5. 반복 종료: n이 0이므로 반복문 종료

     

     

    ✔️ int max = (reversed_A > reversed_B) ? reversed_A : reversed_B;

    위 코드는 삼항 연산자를 사용하여 두수 중에서 더 큰 수를 max 변수에 할당하는 구문이다.

     

    삼항연산자는 아래와 같은 형태를 가진다.

    조건식 ? 참일 때의 값 : 거짓일 때의 값

     

    조건식이 true 일 때는 참일 때의 값이 선택되고, false 일 때는 거짓일 때의 값이 선택된다.

     

    따라서, max 변수에는 두 수 중에서 더 큰 값을 저장하게 된다.

     

    '문제' 카테고리의 다른 글

    (백준) 2566번 '최댓값'  (0) 2023.08.08
    (백준) 2738번 '행렬 덧셈'  (0) 2023.08.08
    (백준) 11718번 '그대로 출력하기'  (0) 2023.08.05
    (백준) 1152번 '단어의 개수'  (0) 2023.08.02
Designed by Tistory.