StringBuilder 백준 반복문 15552번

jungseo·2023년 4월 18일
0

강해지고싶다

목록 보기
1/2
post-thumbnail

첫 출에 테스트의 수를 입력한 뒤 테스트케이스 수만큼 정수를 2개씩 입력하면 각
테스트케이스 마다 두 정수의 합이 출력되게 해야하는 문제이다.

public class main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        int arr[] = new int[n];

        for (int i=0; i<n; i++) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            arr[i] = a + b;
        }
        int i = 0;
        while (i < n) {
            System.out.println(arr[i]);
            i++;
        }
     }
 }
처음 스캐너에 입력되는 숫자만큼 인덱스를 가지는 배열을 선언한 후 
for 반복문안에서 배열의 인덱스 수만큼 a와 b를 입력받아 더한 후 저장했다.
그리고 배열을 한칸씩 출력하는 식으로 작성했는데......

원하는대로 출력 되지만 시간 초과가 뜬다..
내가 할 줄 아는 출력 방식인 저 하나 뿐인데 막막하던 중 문제에 추가 설명이 있었다.

BufferedWriter 외에도, StringBuilder로 출력을 모아 놓았다가 그 String을 System.out.println하는 방법도 있습니다.

BufferedWriter 는 아직 이해가 안갔고 StringBuilder는 어제 잠깐 봤었던 기억이 있어 이걸로 시도 해보기로 했다.

StringBuilder

  1. 메모리 사용: StringBuilder는 내부적으로 char 배열을 사용하여 문자열을 관리해 필요한 만큼만 배열을 생성하여 메모리를 효율적으로 사용한다.
    반면, 배열에 값을 저장하여 출력할 경우, 미리 배열의 크기를 지정해야 하며, 크기를 지정할 때 실제 출력할 문자열의 길이를 고려하지 않으면 메모리를 낭비할 수 있다.

  2. 성능: StringBuilder를 사용하여 문자열을 출력할 경우, 문자열을 한 번에 출력할 수 있으므로 출력 속도가 빠르다.
    반면, 배열에 값을 저장하여 출력할 경우, 배열에 값을 저장한 후에 반복문을 사용하여 값을 하나씩 출력해야 하므로 출력 속도가 느릴 수 있다.

public class main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        StringBuilder stringBuilder = new StringBuilder(); // 객체 생성

        int testCount = scanner.nextInt(); 

        while (testCount > 0) {
            stringBuilder.append(scanner.nextInt()+scanner.nextInt()).append("\n");
            testCount--;
        } 												 //.append() 메서드로 문자열을 추가
        												 //변수의 문자열을 할당할 땐 .toString() 메서드
        System.out.println(stringBuilder);
     }
 }

문제는 통과됐는데 다른 문제들에 비해 메모리가 20배 정도 차이 나서 제대로 한건지 모르겠다..

0개의 댓글