본문 바로가기
백준

[백준] 2908번 : 상수 – JAVA [자바]

by Hongwoo 2022. 7. 8.
반응형

https://www.acmicpc.net/problem/2908

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 2908번 상수는 브론즈 2 난이도의 수학 및 구현 문제이다. 이 문제에서는 입력으로 두 정수가 주어진다. 그리고 두 정수를 거꾸로 읽었을 때 더 큰 수가 어떤 수인지 출력하면 되는 문제이다.

 

간단히 예시를 하나 보겠다.

 

EX) A = 734, B = 893

이 두 수들을 거꾸로 읽으면 437, 그리고 398이 된다. 더 큰 수는 437이므로 답은 437이 된다.

 

우선 이 문제는 StringBuilder를 이용해서 풀 수 있다. 왜냐하면 입력받는 정수를 뒤집어야 하는데 String 클래스에는 reverse() 함수가 없지만 StringBuilder 클래스에는 reverse() 함수가 있기 때문이다.

 

먼저 두 정수를 StringTokenizer로 입력을 받는다. 예를 들어서 다음과 같이 할 수 있다.

 

StringTokenizer st = new StringTokenizer(br.readLine());
String s1 = st.nextToken();
String s2 = st.nextToken();

 

그리고 이 두 문자열 s1과 s2를 StringBuilder로 변환시킨다. 변환은 다음과 같이 할 수 있다.

 

StringBuilder sb1 = new StringBuilder(s1);
StringBuilder sb2 = new StringBuilder(s2);

 

이제 이 두 StringBuilder를 뒤집어야 하니 reverse() 함수만 적용해준다.

 

sb1 = sb1.reverse();
sb2 = sb2.reverse();

 

이러면 뒤집어진 정수가 StringBuilder 변수로 있는 것이다. 이제는 이 두 수를 비교를 해야 하니 int형으로 변환을 해서 어떤 수가 더 큰지를 비교해야 한다. 이것은 많이 사용하는 Integer.parseInt(String s)를 이용해서 할 수 있다. 다만, 이 함수는 매개변수를 String으로 받기 때문에 StringBuilder를 String형으로 변환시켜 줘야 한다.

 

s1 = sb1.toString();
s2 = sb2.toString();

 

이렇게 String형으로 변환시켜준 뒤에 int형으로 변환해서 비교한 다음에 더 큰 수를 출력해주면 된다. 이 과정을 간결하게 쓴 코드는 밑에서 참고할 수 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
        int b = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
        System.out.print(Math.max(a,b));
    }
}

 

 

반응형

댓글