위의 문제에 대해서 처음에는 아래와 같이 코드를 구성하였다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer num = new StringTokenizer(br.readLine(), " ");
int A = Integer.parseInt(num.nextToken());
int B = Integer.parseInt(num.nextToken());
int big = 0;
if (A > B) {
big = A;
} else {
big = B;
}
System.out.println(flip(big));
}
public static int flip(int big) {
int result = 0; // 4,
while (big != 0) { // 734 , 73
result = result * 10 + big % 10;
big /= 10;
}
return result;
}
}
먼저 두 수의 크기를 비교하여 더 큰 수를 flip 메소드를 통하여 거꾸로 출력하려고 시도하였다.
하지만, 문제에서는 "뒤집었을때 더 큰수"를 물어본것이므로 아래와 같이 코드를 수정하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer num = new StringTokenizer(br.readLine(), " ");
int A = Integer.parseInt(new StringBuilder(num.nextToken()).reverse().toString());
int B = Integer.parseInt(new StringBuilder(num.nextToken()).reverse().toString());
if (A > B) {
System.out.println(A);
} else {
System.out.println(B);
}
}
}
StringBuilder
는 Java에서 문자열을 처리하는 클래스 중 하나로, 문자열을 동적으로 생성, 수정 및 조작할 수 있도록 지원하는 클래스이다.
일반적인 String 클래스와는 달리 StringBuilder
클래스는 가변적인 크기를 가지므로, 문자열 연산을 수행할 때 매번 새로운 객체를 생성하지 않아도 되므로 메모리 효율성이 높아진다.
이를 이용하여 Token을 거꾸로 뒤집고, 문자열 형태 toString으로 변환한 뒤, 다시 이를 Int형으로 변환하여 각각 A와 B로 구분해주었다.