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]);
}
'알고리즘' 카테고리의 다른 글
[이코테 with Java] 큰수의 법칙(그리디 알고리즘) (0) | 2024.01.18 |
---|---|
[이코테 with Java] 거스름돈 문제 (그리디 알고리즘) (0) | 2024.01.18 |
[백준] 3052, 10811 (0) | 2024.01.12 |
[백준] 10810번 문제 해결 (2) | 2024.01.10 |
[백준] BuffereredReader 15552 문제 해결 (0) | 2024.01.02 |