문제
백준 2908번
두 상수를 입력받고, 상수를 거꾸로 뒤집은 후 대소비교하여 큰 수를 출력하는 문제이다.
- StringBuffer을 사용해서 구현했지만 StringBuilder을 사용하는 것이 더 적절. Note참고
풀이 : StringBuffer의 reverse()
문자열 A, B를 String으로 받는다.
A, B를 StringBuffer 객체로 선언하고 reverse()를 사용해 문자열을 뒤집은 후 다시 String객체로 변환한다.
해당 String객체를 다시 정수로 변환한 후 revA, revB에 저장한다.
revA, revB 대소비교 후 큰 수를 출력한다.
타입 변환 : String -> StringBuffer(reverse()를 사용하기 위해) -> String(parseInt()를 사용하기 위해) -> int
코드
//코드 1-1
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
String A = st.nextToken();
String B = st.nextToken();
StringBuffer sb1 = new StringBuffer(A);
StringBuffer sb2 = new StringBuffer(B);
int revA = Integer.parseInt(sb1.reverse().toString());
int revB = Integer.parseInt(sb2.reverse().toString());
bw.write((revA>revB?revA:revB) + " ");
bw.close();
}
}
선언 횟수를 줄여서 코드를 더 간결하게 만들면 아래와 같다.
//코드 1-2
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int revA = Integer.parseInt(new StringBuffer(st.nextToken()).reverse().toString());
int revB = Integer.parseInt(new StringBuffer(st.nextToken()).reverse().toString());
bw.write((revA>revB?revA:revB) + " ");
bw.close();
}
}
위 - 코드 1-2
아래 - 코드 1-2
선언 횟수를 줄이니 성능이 좋아졌다.
Note
- StringBuffer vs StringBuilder?
- 단일 스레드는 보통 StringBuilder를 사용한다.
- StringBuilder와 StringBuffer는 둘 다 문자열을 저장하고 조작하는데 사용하는 클래스이고, 지원하는 메서드도 같다.
- 다만 StringBuffer는 멀티스레드 환경에서 동기화를 지원하고 StringBuilder는 동기화를 지원하지 않는다는 점에서 차이가 있다.
- 따라서 연산이 많은 경우, 프로그램이 스레드에 안전해야 하는 경우 StringBuffer를 쓰는 것이 권장된다.
- 보통 멀티 스레드와 상관없는 경우에는 StringBuilder을 사용한다.
- 이번 문제의 경우 StringBuilder을 사용하는 것이 적절하다.
- String과의 차이점은 여기 참고
'BOJ' 카테고리의 다른 글
[백준 10988번/JAVA] 팰린드롬인지 확인하기 (0) | 2024.03.11 |
---|---|
[백준 2224번/JAVA] 별 찍기 - 7 (0) | 2024.03.11 |
[백준 1152/JAVA] 단어의 개수 (0) | 2024.03.08 |
[백준 2675번/JAVA] 문자열 반복 (0) | 2024.03.08 |
[백준 10809번/JAVA] 알파벳 찾기 | 문자열 (2) | 2024.03.07 |