백준 문제 2751번을 푸는 과정 중 해당 내용에 대해 학습을 하게 되었다.
간단하게 받은 수를 정렬하는 문제인데, 시간 제한이 걸려 있어 효율적인 함수를 사용해야했다.
기본적으로는 Scanner와 유사하다.
허나 버퍼리더는 입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성이 올라간다
그러므로 많은 양의 데이터를 처리할 때 유리하고 알고리즘 문제를 풀 때는 보통 버퍼리더를 통해 값을 입력 받고 시작하는 것이 좋다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
int num = Integer.parseInt(bf.readLine());
위에서 언급한 단점대로 받은 데이터가 string형태로 고정된다. 그렇기 때문에 int를 받는 경우는 받은 string형을 다시 변경할 필요가 있다.
일반적으로 자바는 string자료형의 값 변경이 불가능하다.
이것이 가능한 것처럼 보일 수 있는데
string str = "Hi";
str += "Good";
이렇게 할 시에는 실제로 str을 찍어보면 HiGood이 나온다.
그렇다고 이것이 값이 변경된 것은 결코 아니다.
값이 변경된 것이 아니고, 재할당을 통해 값을 나오게 하는 것이다.
이러한 과정들은 메모리상 효율을 좋게 하지 않는다.
이 문제를 해결할 수 있는 것이 StringBuilder이다.
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("A").append("B");
System.out.print(stringBuilder.toString());