기본적인
Scanner sc =new Scanner(System.in);
sc.nextInt();
sc.nextLong();
우리가 개행문자나 엔터를 동시에 받고 싶다면
sc.nextLine(); 으로 쓴다.
그리고 이거를 숫자로 변환해주어야 하면
Integer.parseInt(sc.nextLin())으로 해준다.
BufferedReader
데이터를 임시로 저장하는 메모리 공간
입출력 작업에서 데이터를 모았다가 한번에 처리

문자를 바로 배열로 받는 방식 매우 좋은 거 같다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
while (n-- > 0) {
char[] chars = br.readLine().toCharArray();
int score = 0;
int cnt = 0;
for (char c : chars) {
if (c == 'O') {
score += ++cnt;
} else {
cnt = 0;
}
}
sb.append(score).append('\n');
}
System.out.println(sb);
br.close();
}
}
주문 -> 주문을 바로 바로 처리 방식 이 아닌
일단 기록을 잔뜩 해 놓음
8000 바이트를 한 번에 저장하고 한번에 프로그램으로 저장시킨다.
보통 BufferedReader가 Scanner 보다 처리속도가 3배에서 5배정도 빠르다.
IOException을 해주어야 한다.

이렇게 하면 객체를 매번 생성해서 메모리가 누수된다.
StringBuilder
String str=new String("안녕하세요") 이런식으로 되어있다. 이건데 "안녕하세요"라고 써도 된다.
StringBuilder는 String 과 달리 객체를 new 로 반드시 선언을 해 주어야 한다.
문자를 자동으로 수정하는게 매우 편하다.
sb.append() 기존 객체를 계속 수정을 해준다. (메모리가 굉장히 절약된다.) (객체를 생성하지않고)
sb.toString() 스트링으로 변환한다.
sb.length()
sb.delete(시작,끝) ---> 특정 문자열을 제거할 수 있다. (특정범위를 삭제할 수 있다.)
'프로그래머스 백준 문제' 카테고리의 다른 글
| 프로그래머스 Hash 문제 (이거는 보자) (0) | 2026.07.22 |
|---|---|
| 프로그래머스 HashMap 기본문제 (0) | 2026.07.22 |
| 10026번 적록색약 (3) | 2025.07.17 |
| 가장 긴 공통인 수열(문장) (0) | 2025.07.16 |
| 12015 번 가장 긴 증가하는 부분 수열2 (0) | 2025.07.16 |