문제

(백준) 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