첫 출에 테스트의 수를 입력한 뒤 테스트케이스 수만큼 정수를 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는 내부적으로 char 배열을 사용하여 문자열을 관리해 필요한 만큼만 배열을 생성하여 메모리를 효율적으로 사용한다.
반면, 배열에 값을 저장하여 출력할 경우, 미리 배열의 크기를 지정해야 하며, 크기를 지정할 때 실제 출력할 문자열의 길이를 고려하지 않으면 메모리를 낭비할 수 있다.
성능: 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배 정도 차이 나서 제대로 한건지 모르겠다..