프로그래머스 백준 문제

코테 Scanner 객체 사용법

전한준 2026. 7. 21. 16:56

 

기본적인 

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(시작,끝) ---> 특정 문자열을 제거할 수 있다.  (특정범위를 삭제할 수 있다.)