코테 알고리즘 전 기본 학습

Seoyeon·2025년 12월 18일

코딩테스트

목록 보기
3/4

1. 입력 도구: Scanner vs. BufferedReader

Scanner (느리지만 편함)

  • 특징: 공백, 엔터를 알아서 구분해주고 nextInt()처럼 숫자로 바로 바꿔주는 기능이 있음
  • 단점: 데이터 양이 많아지면(대략 10만 개 이상) 시간 초과의 주범

BufferedReader (복잡하지만 빠름)

  • 특징: 데이터를 "버퍼(Buffer)"라는 바구니에 한꺼번에 담아왔다가 꺼내 씁니다.
  • 단점: 예외 처리(throws IOException)가 필요하고, 무조건 문자열(String)로만 읽어와서 숫자로 바꾸는 과정이 따로 필요

무조건 외워야 할 코드 패턴:

// 1. 선언 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// 2. 한 줄 읽기
String s = br.readLine(); 

// 3. 숫자로 바꾸기 (String -> int)
int n = Integer.parseInt(s); 

2. 문자열 자르기: split vs. StringTokenizer

BufferedReader로 한 줄을 통째로 읽어왔다면(예: "10 20 30"), 이제 이걸 조각내기!

split()

  • 문자열을 특정 기호(주로 공백)를 기준으로 잘라서 배열로 만들기
  • 사용법: String[] arr = s.split(" ");

StringTokenizer

  • split보다 빨라서 코테에서는 이걸 더 많이 씀!
  • 사용법:
StringTokenizer st = new StringTokenizer(br.readLine()); // "10 20" 읽기
int a = Integer.parseInt(st.nextToken()); // "10" 꺼내기
int b = Integer.parseInt(st.nextToken()); // "20" 꺼내기

3. 문자열 뽑아내기: substring

문자열의 특정 부분만 쏙 빼오고 싶을 때 사용

  • 사용법: s.substring(시작인덱스, 끝인덱스)
  • 주의: 시작은 포함, 끝은 미포함 (끝인덱스 바로 앞까지만 가져옴)
String s = "HelloJava";
System.out.println(s.substring(0, 5)); // "Hello" (인덱스 0,1,2,3,4 까지)
System.out.println(s.substring(5));    // "Java" (5부터 끝까지)

4. 문자열 합치기: StringBuilder

String s = s + "안녕"을 쓰면 안 되나요?

자바에서 String은 한 번 만들면 수정이 불가함. +를 할 때마다 컴퓨터는 새로운 문자열 객체를 계속 만들어서 1만번을 더하면 1만 개의 객체가 생겨서 메모리가 터지거나 속도가 엄청나게 느려짐

StringBuilder

수정 가능한 문자열 통으로 내용을 아무리 추가해도(append) 객체를 새로 만들지 않고 하나의 통 안에 계속 쌓음

실전 예제

StringBuilder sb = new StringBuilder();

for(int i=0; i<100; i++) {
    sb.append(i).append("\n"); // 통에 계속 담기
}

System.out.print(sb); // 마지막에 한 번만 출력 (시간 단축 핵심!)

한눈에 정리

기능도구용도핵심 포인트
입력BufferedReader빠른 입력Integer.parseInt()와 세트
자르기StringTokenizer공백 기준 분리nextToken()으로 하나씩 호출
부분 추출substring특정 구간 추출(시작, 끝)에서 끝은 포함 안 됨
합치기/출력StringBuilder빠른 출력append()로 모아서 한 번에 출력

0개의 댓글