코딩테스트/백준

[백준] 2908번 - 숫자 뒤집기(JAVA)

s워니얌 2023. 7. 7. 16:45

 

백준 2908번 문제는 입력받은 숫자를 뒤집어야 되는 문제이다. 

 

 

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

 

2908번: 상수

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

www.acmicpc.net

 

 

 

숫자를 뒤집을 수 있는 방법은 뭐가있을까? 일단 내가 풀어본 정답이다.

 

 

📑 정답 1번 

 

754라는 숫자를 받았을때 이 숫자의 나머지를 먼저 구한다. 그 나머지를 임의의수에 저장해두고 거꾸로 바꿔야할 자리수를 생각해본 후 10의 배수를 곱해준다. 

 

예를들어 4라는 숫자는 거꾸로 바꿨을 시 백의자리 즉 457이라는 수를 만들기 위해 백의자리로 가야한다. 그렇기에 4 * 100을 해주고 임의의수에 저장한다. 

 

위의 방식을 3번 반복하면 400 + 50 + 7을 만들어서 457이라는 수를 출력한다. 

 

 

package step5;


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

public class Q8_숫자뒤집기  {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int a = Integer.parseInt(st.nextToken()); //첫번째 숫자
        int b = Integer.parseInt(st.nextToken()); //두번째 숫자
        int max = 0;


        a = reverseNumber(a);
        b = reverseNumber(b);

        System.out.println(Math.max(a, b));

    }

    /**
     * 5432 % 10 = 2
     * 543  % 10 = 3
     * 54 % 10 = 4
     *
     */
    public static int reverseNumber(int inputNum){
        int reNum =0;

        for(int i=2; i>=0; i--){
            int remainNum = inputNum%10;
            reNum += (int)(remainNum * Math.pow(10, i));
            inputNum= inputNum/10;
        }


        return reNum;
    }



}

 

 

 

📑 정답 2번

 

package step5;

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

public class Q8_2908 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int num1 = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
        int num2 = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());

        System.out.println(num1>num2?num1:num2);

    }
}

 

 

StringBuilder의 메서드 reverse()를 사용하였다. String은 불변 클래스, 다른 StringBuffer와  StringBuilder 클래스는 가변 클래스이다. 아래 포스팅 설명에 더 자세히 나와있다. 

 

StringBuilder 클래스는 문자열을 수정하거나 조작하기 위한 유틸리티 클래스이며, 문자열을 직접 수정할 수 있는 가변 문자열 버퍼를 제공해준다. 따라서 reverse를 이용해 간단하게 문자열의 앞뒤를 바꾼 후 이를 int형으로 형변환해서 크기가 큰 수를 알아낼 수 있다. 

 

 

https://wonisdaily.tistory.com/236

 

[JAVA] String, StringBuilder, StringBuffer의 차이점 알아보기

📑 String이란? String과 다른 (StringBuilder, StringBuffer)의 차이는 String은 immutable(불변), 다른 클래스는 mutable(변함)에 있다. String은 문자열을 대표하는 것으로 문자열을 조작하는 경우 유용하게 사용할

wonisdaily.tistory.com

 

반응형