새발블로그

코딩테스트를 위한 Java 개요 본문

Problem Solving/개념

코딩테스트를 위한 Java 개요

EUG 2025. 7. 4. 17:23

1. 패키지 임포트

자바에서 클래스 또는 인터페이스를 사용하려면 해당 패키지를 import 해야 한다.

import java.util.*; // 대부분의 코딩 테스트 문제에서 필수
import java.io.*;   // BufferedReader, BufferedWriter 등 입출력 시 필요
  • java.util : ArrayList, HashMap, Queue, Scanner 등
  • java.io : BufferedReader, InputStreamReader, BufferedWriter, OutputStreamWriter

2. 표준 입출력

Scanner (간단한 입력)

Scanner scanner = new Scanner(System.in);
String str = scanner.next();      // 문자열
int num = scanner.nextInt();      // 정수
double d = scanner.nextDouble();  // 실수
  • 단점: 입력량이 많으면 느림 → 시간 초과 위험

BufferedReader (입력이 많은 경우 권장)

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] tokens = reader.readLine().split(" ");
int n = Integer.parseInt(tokens[0]);
int m = Integer.parseInt(tokens[1]);

BufferedWriter (출력이 많은 경우)

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
writer.write("출력 내용");
writer.newLine(); // 줄 바꿈
writer.flush();   // 반드시 호출

 

3. 커스텀 클래스 구현

내부 클래스 사용

public class Solution {
    static class Entry implements Comparable<Entry> {
        int weight;
        int to;

        public Entry(int weight, int to) {
            this.weight = weight;
            this.to = to;
        }

        @Override
        public int compareTo(Entry o) {
            return this.weight - o.weight;
        }
    }
}
  • Comparable<T> 인터페이스를 구현하여 정렬 기준 설정

4. 객체지향과 인터페이스

Java는 객체지향 언어로, 클래스 간 역할을 분리해 유연한 구조를 제공한다.

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  • System.in: 표준 입력 스트림
  • InputStreamReader: 바이트를 문자로 변환
  • BufferedReader: 효율적인 읽기 제공

인터페이스 사용 예시

Queue<String> q = new ArrayDeque<>();
  • 인터페이스 타입으로 선언 → 다양한 구현체 교체 가능 (LinkedList, PriorityQueue, 등)

5. 헬퍼 클래스

자바는 다양한 유틸리티 메소드를 제공하는 헬퍼 클래스를 제공한다.

  • Arrays.sort(array): 배열 정렬
  • Collections.sort(list): 리스트 정렬
  • Math.max(), Math.min(), Math.abs() 등

6. 원시 타입과 참조 타입

원시 타입  참조 타입
int, long 등 Integer, String, int[], ArrayList 등

주요 차이점

  • 원시 타입은 값을 직접 저장 → 복사됨
  • 참조 타입은 객체의 참조값 저장 → 객체 공유됨
int[] a = new int[]{1, 2, 3};
int[] b = a;
b[0] = 42; // a[0]도 42로 변경됨

 

7. 제네릭 타입

List<Integer> list = new ArrayList<>();
Queue<String> q = new LinkedList<>();
  • 제네릭은 참조 타입만 사용 가능
  • 원시 타입 사용 불가 → 래퍼 클래스(Integer, Double, 등) 사용

오토박싱 & 언박싱

Integer a = 10;      // 오토박싱
int b = a;           // 언박싱

 

8. 컬렉션 순회

일반 for문

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

For-each 문

for (int n : array) {
    System.out.println(n);
}

Map 순회

for (Map.Entry<Integer, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " " + entry.getValue());
}

 

9. 흐름 제어 & 라벨

break & continue

for (int i = 0; i < 10; i++) {
    if (i == 5) break;
    if (i % 2 == 0) continue;
}

라벨을 이용한 반복문 탈출

outer:
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        if (condition) break outer;
    }
}

 

10. 큰 값 설정

int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;

long maxL = Long.MAX_VALUE;
long minL = Long.MIN_VALUE;

연산 중 오버플로우가 발생하지 않도록 주의

 

'Problem Solving > 개념' 카테고리의 다른 글

완전탐색 (Exhaustive Search) - 반복문을 활용한 접근  (2) 2025.07.04
시간복잡도  (0) 2025.07.04
Java 문자열 처리  (0) 2025.07.04
코딩테스트를 위한 Java 심화  (0) 2025.07.04
테스트케이스  (0) 2025.07.04