Algorithm

[백준] 2908 번 - 상수 (Java)

haehyun 2022. 2. 7. 16:27

문제

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

 

2908번: 상수

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

www.acmicpc.net

 

코드

1. StringBuffer 타입으로 처리하는 방법

StringTokenizer로 두 정수를 토큰으로 분리한 뒤, 각 문자열을 거꾸로 뒤집은 결과를 int 타입으로 파싱한다.

import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        StringTokenizer st = new StringTokenizer(s, " ");

        int a = Integer.parseInt(new StringBuffer(st.nextToken()).reverse().toString());
        int b = Integer.parseInt(new StringBuffer(st.nextToken()).reverse().toString());

        System.out.print(Math.max(a, b));
    }
}

 

2. int 타입으로 처리하는 방법

정수 두 개를 차례로 입력받는다. 각 정수의 자릿수를 뒤에서 부터 하나씩 잘라서 1의 자릿수를 100의 자릿수로, 100의 자릿수를 1의 자릿수로 가지는 새로운 int 값을 만든다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] num = new int[2];
        num[0] = sc.nextInt();
        num[1] = sc.nextInt();
        int[] result = new int[2];
        
        for(int i = 0; i < 2; i++){
            for(int j = 100; j > 0; j /= 10){
                result[i] += (num[i] % 10) * j;
                num[i] /= 10;
            }
        }
        System.out.print(Math.max(result[0], result[1]));
    }
}

 

= 두 방법 모두 결과는 정답이나, 본 문제가 [문자열 처리] 문제로 분류되어 있는 만큼, StringTokenizer, StringBuffer를 사용하는 첫번째 방법을 이용하기를 권장.