https://www.acmicpc.net/problem/2908
문제
> 상근이의 동생 상수는 수학을 정말 못한다.
> 상수는 숫자를 읽는데 문제가 있다.
> 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다.
> 상근이는 세 자리 수 두 개를 칠판에 써주었다.
> 그 다음에 크기가 큰 수를 말해보라고 했다.
> 상수는 수를 다른 사람과 다르게 거꾸로 읽는다.
> 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다.
> 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
> 두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
접근
두 수를 입력을 받은 뒤 문자열로 처리하면서 인덱스를 역순으로 반복하여 뒤집는다. 이제 두 수를 max연산으로 더 큰 수를 골라낸다.
문제해결
> StringTokenizer로 두 수를 입력받고 각각 s1, s2에 저장한다.
> 뒤집어서 저장할 변수 ns1, ns2를 빈 문자열형 변수로 선언한다.
> 반복문으로 역순으로 반복하여 ns1과 ns2에 붙여넣는다.
> 두 문자열 ns1,ns2를 정수형을 변환한 뒤 max연산을 통해 비교해 출력한다.
코드
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main
{
//2908번 상수
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String s1 = st.nextToken();
String s2 = st.nextToken();
String ns1 = "";
String ns2 = "";
for (int j = 2; j >= 0; j--)
{
ns1 += s1.charAt(j);
ns2 += s2.charAt(j);
}
int Max = Math.max(Integer.parseInt(ns1), Integer.parseInt(ns2));
System.out.println(Max);
}
}

후기
뭔가 뒤집는 부분이 맘에 안들었다. c++에서도 reverse도 있어서 뭔가 없을까 했는데 String 자체에는 없었다. 찾아보니 StringBuilder에 있었다. ns1,ns2에 나처럼 하지 않고
new StringBuilder(s1 혹은 s2).reverse().toString()해주면 된다. 여기서 toString을 해주는 이유가 뭔가 봤더니 StringBuilder라는 참조형 변수형이기 때문에 이를 문자열로 바꿔주지 않으면 문자열형 변수 ns1,ns2에 들어가지 않는다고 한다.