[Java] 출력 - StringBuilder (백준 10950번)

Jina·2023년 7월 13일
0

Java

목록 보기
4/13

백준을 풀다보니 여러 문자열을 붙여서 출력할 때 StringBuilder를 사용하는 사람들이 많았다.
그래서 검색해보니 성능면에서 더 뛰어나다고한다. 내용은 다음과 같다.

📍 StringBuilder

💡 StringBuilder를 사용하는 이유

  1. 기존의 String 객체를 더하는 + 는 문자열을 붙일 때마다 새로운 String 객체를 생성하기 때문에 성능이 떨어진다.

    String 연결시 새로운 객체를 생성해야 하는 이유는, String객체는 변경할 수 없기 때문!

  2. 반면 StringBuilder는 새로운 객체 생성이 아니라, 기존 객체에 더하는 방식! -> 성능을 더 개선시킬 수 있다.

💡 사용 방법

  • 선언
StringBuilder sb = new StringBuilder();
  • 문자열 붙이기
sb.append("ABCDE");
sb.append("연결").append("연결");
  • 사용
String s = sb.toString();

📍 백준 10950번에 적용해보기

  • StringBuilder 적용 후
import java.io.*;
import java.util.StringTokenizer;

public class Main {

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {

        int testNum = 0;  // 반복 개수
        int A,B = 0;        // 정수 A,B

        //StringBuilder 추가!!
        StringBuilder sb = new StringBuilder();

        testNum = Integer.parseInt(br.readLine());
        for(int i=0; i<testNum; i++) {

            StringTokenizer st = new StringTokenizer(br.readLine());
            A = Integer.parseInt(st.nextToken());
            B = Integer.parseInt(st.nextToken());

            sb.append(A+B); // StringBuilder에 문자열 연결
            sb.append("\n");
        }
        br.close();

        bw.write(sb.toString());    // 출력
        bw.flush();
        bw.close();
    }
}
  • 기존 코드의 반복문
for(int i=0; i<testNum; i++) {
            
            StringTokenizer st = new StringTokenizer(br.readLine());
            A = Integer.parseInt(st.nextToken());
            B = Integer.parseInt(st.nextToken());
            
            bw.write(A+B +"\n");   
        }

결과적으로 메모리와 속도 모두 개선되었다!


참고자료

https://www.codejava.net/java-core/the-java-language/why-use-stringbuffer-and-stringbuilder-in-java
https://hardlearner.tistory.com/288

0개의 댓글

관련 채용 정보