728x90
▶ BufferedReader와 StringBuilder을 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
입력 & 출력
나의 풀이
이번 문제는 입력된 문자열 숫자를 뒤집어서 더하고 다시 뒤집어서 출력하는 문제입니다.
입력을 String타입으로 받아주고, StringBuilder의 reverse() 메서드를 사용하여 문자열을 뒤집어 줍니다.
뒤집어준 문자열 숫자를 연산을 해야 하기 때문에 Integer.parseInt() 메서드로 정수형으로 캐스팅을 해줘야합니다.
그리고 마지막으로 연산된 결과를 다시 뒤집어주면 마무리가 됩니다.
Refactoring
StringBuilder의 reverse() 메서드를 사용하는 부분을 하나로 묶어 함수로 선언했습니다.
문자열을 뒤집어 순자로 변환하는 부분이 한 곳에 있어 코드의 가독성이 더 좋아졌습니다.
다른 풀이✅
import java.util.Scanner;
public class BOJ1357 {
private static int Rev(int num) {
int result = 0;
while (num > 0) {
result = result * 10 + num % 10;
num /= 10;
}
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();
int result = Rev(Rev(x) + Rev(y));
System.out.println(result);
}
}
문제에서 요구하는 모범답안이 있다면 다음과 같을 것 같습니다.
형변환도 필요 없고, 코드의 가독성 또한 좋은 코드인 것 같습니다.
Rev() 함수에 인자가 들어오면 해당 정수를 10으로 나눠서 1의 자리를 떼어내고, 10을 곱해주어 다시 1 -> 10 -> 100의 자리로 이동하여 최종적으로 정수형 숫자가 역순으로 변환됩니다.
Rev(1234)
- 초기 상태:
- num = 1234
- result = 0
- 첫 번째 반복:
- result = result * 10 + num % 10 = 0 * 10 + 1234 % 10 = 4
- num = num / 10 = 1234 / 10 = 123
- 상태: num = 123, result = 4
- 두 번째 반복:
- result = result * 10 + num % 10 = 4 * 10 + 123 % 10 = 40 + 3 = 43
- num = num / 10 = 123 / 10 = 12
- 상태: num = 12, result = 43
- 세 번째 반복:
- result = result * 10 + num % 10 = 43 * 10 + 12 % 10 = 430 + 2 = 432
- num = num / 10 = 12 / 10 = 1
- 상태: num = 1, result = 432
- 네 번째 반복:
- result = result * 10 + num % 10 = 432 * 10 + 1 % 10 = 4320 + 1 = 4321
- num = num / 10 = 1 / 10 = 0
- 상태: num = 0, result = 4321
- 반복 종료: num이 0이 되었으므로 반복을 종료하고 result = 4321을 반환합니다.
위와 같이 코드가 진행되게 됩니다.
참고 ❗
'Coding Test > 백준' 카테고리의 다른 글
[백준] 적어도 대부분의 배수 (BufferedReader, StringTokenizer, 브루트 포스, ,1145번, Java) (0) | 2024.06.23 |
---|---|
[백준] 슈퍼마리오 (BufferedReader, 브루트 포스 알고리즘, 2851번, Java) (0) | 2024.06.22 |
[백준] 캠핑 (BufferedReader, 4796번, Java) (0) | 2024.06.07 |
[백준] 세 막대 (삼각형 변의 길이 조건, 14215번, Java) (1) | 2024.06.06 |
[백준] 나누기 (BufferedReader, printf, 1075번, Java) (0) | 2024.06.06 |