1부터 n까지의 합
n * (n + 1) / 2
[ StringBuilder ]
- 가변 객체(Mutable Object)
- 문자열이 변경될 때 새로운 객체를 생성하지 않고, 기존 객체 내부에서 내용을 변경
- 성능과 메모리 측면에서 매우 효율적
1. 가변성:
• 문자열의 추가, 삭제, 변경 작업을 기존 객체에서 수행
2. 효율성:
• 반복적인 문자열 수정 작업에서 메모리를 덜 사용하고, 속도가 빠름
3. 메서드 제공:
• 문자열 추가 (append), 삭제 (delete), 삽입 (insert), 반전 (reverse) 등의 다양한 메서드를 제공
* Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용
[ BufferedReader와 BufferedWriter ]
1. BufferedReader 사용:
• BufferedReader는 입력을 버퍼링하여 대량의 입력을 효율적으로 처리
• readLine()을 사용하여 한 줄씩 읽음
2. BufferedWriter 사용:
• BufferedWriter는 출력 스트림을 버퍼링하여 출력 작업을 최적화
• write()를 사용하여 출력 내용을 기록하고, \n으로 줄바꿈을 추가
4. 출력 최적화:
• 반복문 안에서 출력할 내용을 BufferedWriter에 기록
• 출력 스트림을 비우기 위해 마지막에 flush()를 호출
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));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String[] input = br.readLine().split(" ");
int A = Integer.parseInt(input[0]);
int B = Integer.parseInt(input[1]);
bw.write((A + B) + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
for (int i = 1; i <= N; i++) {
// 공백 출력 (N - i 개)
for (int j = 1; j <= N - i; j++) {
System.out.print(" ");
}
// 별 출력 (i 개)
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
// 줄바꿈
System.out.println();
}