[백준] 2908번(StringBuilder 활용 X, StringBuilder 활용 O)

2024. 1. 16. 17:02알고리즘

문제


상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

입력


첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

 

 

백준 2908번 문제는 문자열을 역순으로 저장한 후, 정수형으로 고쳐 크기 비교를 해야 한다.

 

 

 


 

 

 

 

1. StringBuilder의 reverse() 사용 X 


import java.util.*;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        String[] arr = scanner.nextLine().trim().split(" ");
        int[] arr2 = new int[2];
        
        for(int i = 0; i < arr.length; i++){
        	char[] charArray = arr[i].toCharArray();
            int left = 0;
            int right = charArray.length - 1;
            
            while (left < right) {
            	char temp = charArray[left];
                charArray[left] = charArray[right];
                charArray[right] = temp;
                
                left++;
                right--;
            }
            
            arr2[i] = Integer.parseInt(new String(charArray));
            
        }
        
        if(arr2[0] > arr2[1]) {
        	System.out.print(arr2[0]);
        } else {
        	System.out.print(arr2[1]);
        }
   }
}

 

첫 번째 방법은 StringBuilder의 reverse 함수를 사용하지 않는 것이다. 

 

1. 사용자로부터 문자열을 입력받는다. 입력받은 문자열은 trim()을 통해 앞뒤 공백을 제거하고, split(" ")을 통해 공백 이후의 문자열과 이전의 문자열을 분리한다. 

        Scanner scanner = new Scanner(System.in);
        String[] arr = scanner.nextLine().trim().split(" ");
        int[] arr2 = new int[2];

 

2. String 배열에 있는 문자열을 문자 배열로 바꿔준다. (왜냐하면 문자열은 charAt(int index)를 통해 변환을 주는 것이 불가능하기 때문에, 문자 배열로 바꾸어 변환시켜줘야 한다.)

	char[] charArray = arr[i].toCharArray();

 

3. left에는 첫 번째 인덱스인 0, right에는 마지막 인덱스인 charArray.length - 1을 넣어주고, left는 증가시키고, right는 감소시켜 문자를 역순으로 배치한다. 

    int left = 0;
    int right = charArray.length - 1;

    while (left < right) {
        char temp = charArray[left];
        charArray[left] = charArray[right];
        charArray[right] = temp;

        left++;
        right--;
    }

 

4. charArray의 내용을 정수로 바꿔준다. 이때 Integer 클래스의 parseInt 메서드를 활용할 수 있다. 

	arr2[i] = Integer.parseInt(new String(charArray));

 

5. 더 큰 숫자를 출력해준다. 

	if(arr2[0] > arr2[1]) {
        	System.out.print(arr2[0]);
    	} else {
        	System.out.print(arr2[1]);
    	}

 


 

 

2. StringBuilder의 reverse 사용


import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] arr = scanner.nextLine().trim().split(" ");
        int[] arr2 = new int[2];

        for (int i = 0; i < arr.length; i++) {
            StringBuilder sb = new StringBuilder(arr[i]);
            sb.reverse(); // 문자열 뒤집기
            arr2[i] = Integer.parseInt(sb.toString()); // 뒤집힌 문자열을 정수로 변환
        }

        if (arr2[0] > arr2[1]) {
            System.out.print(arr2[0]);
        } else {
            System.out.print(arr2[1]);
        }
    }
}

 

1. 사용자로부터 문자열을 입력받는다. 입력받은 문자열은 trim()을 통해 앞뒤 공백을 제거하고, split(" ")을 통해 공백 이후의 문자열과 이전의 문자열을 분리한다. 

        Scanner scanner = new Scanner(System.in);
        String[] arr = scanner.nextLine().trim().split(" ");
        int[] arr2 = new int[2];

 

2. 분리된 문자열을 StringBuilder 객체로 새로 생성해준 후, reverse 메서드를 활용해 뒤집는다.

그리고, 뒤집은 StringBuilder 타입 문자열을 String 타입으로 바꾸고, Interger 클래스의 parseInt를 활용해 정수로 변환한다. 

    for (int i = 0; i < arr.length; i++) {
                StringBuilder sb = new StringBuilder(arr[i]);
                sb.reverse(); // 문자열 뒤집기
                arr2[i] = Integer.parseInt(sb.toString()); // 뒤집힌 문자열을 정수로 변환
    }

 

3. 더 큰 숫자를 출력해준다. 

	if(arr2[0] > arr2[1]) {
        	System.out.print(arr2[0]);
    	} else {
        	System.out.print(arr2[1]);
    	}