코딩테스트/Java

[BaekJoon][문자열][Java] 2908: 상수

프린이8549 2024. 8. 13. 15:46

<문제>

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

 

<입력>

첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

 

<출력>

첫째 줄에 상수의 대답을 출력한다.

 

<핵심 아이디어>

%,*연산을 통해 숫자를 뒤집어서 재배열하기

 

1. 상근이가 칠판에 적은 수 A, B 입력 받기
 2. 각각의 수를 거꾸로 배열하기
 3. 거꾸로 배열한 수의 크기를 비교하여 큰 수 출력하기

 

<풀이>

package BOJ.string;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ2908 {	
	/**
	 * 숫자를 뒤집는 메소드
	 * @param num
	 * @return
	 */
	public static int reverse(int num) {
		int reverse = 0;
		while(num > 0) {
			int digit = num % 10; // 10으로 나눈 나머지는 1의 자리
			reverse = reverse * 10 + digit; // 일의 자리부터 *10을 통해 한 자리씩 digit을 배치
			num /= 10; // 그 다음 자리의 값을 추출하기 위해서 /10 연산
		}
		return reverse;
	}
	
	public static void main(String[] args) throws IOException {
		// 1. 상근이가 칠판에 적은 수 A, B 입력 받기
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int A, B, reverseA, reverseB;
		StringTokenizer st  = new StringTokenizer(br.readLine());
		A = Integer.parseInt(st.nextToken());
		B = Integer.parseInt(st.nextToken());
		
		// 2. 각각의 수를 거꾸로 배열하기
		reverseA = reverse(A);
		reverseB = reverse(B);
        // 또는 Stringbuilder의 .reverse() 메서드도 이용 가능
		
		// 3.크기 비교하여 출력
		if(reverseA > reverseB) System.out.println(reverseA);
		else System.out.println(reverseB);
        // 또는 System.out.println(Math.max(reverseA,reverseB)); 도 가능
		
		br.close();
	}
}