Home [코딩테스트] Java 정리 - 1
Post
Cancel

[코딩테스트] Java 정리 - 1

코딩테스트에서 자주 사용되는 Java 문법들을 정리했습니다.

1. 자료형 (Data Types)

  • 기본 자료형 (Primitive Types)
    • int, long : 정수 (크기에 따라 선택)
    • double : 실수
    • boolean : 논리값 (true/false)
    • char : 단일 문자
  • 참조 자료형 (Reference Types)
    • String: 문자열 객체
    • Integer, Long래퍼 클래스 (Wrapper Classes): 기본 자료형을 객체 형태로 다룰 때 사용 (ex. 컬렉션에 저장)
    • 사용자 정의 클래스, 배열 등 모든 객체는 참조 자료형

2. 형 변환 (Type Conversion)

  • String → int / char
1
2
3
4
5
6
7
String str = "123";
int intVal = Integer.parseInt(str);  // Integer 반환
int intVal = Integer.valueOf(str).intValue();  // int 반환

String str = "string";
char c = str.charAt(0);  // 특정 인덱스의 문자를 char로 반환 (s)
char[] cArr = str.toCharArray();  // 문자열을 char형 배열로 반환
  • int → double / String / char
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int i = 123;
double d = i;  // 자동 형변환

int intVal = 123;
String str = Integer.toString(intVal);
String str = String.valueOf(intVal);
String str = intVal + "";

int a = 65;
char b = (char) a;  // 아스키 코드 값에 상응하는 char 반환 - 강제 형 변환 (A)

int a ='1';  // 0-9 사이의 값을 ‘’사이에 넣어주면 문자 그대로의 char 반환, (1 + '')도 가능
char b = (char) a;  // (1)

int a = 123456789;
char b = Integer.toString(a).charAt(3);  // 문자열로 변환 후 char 반환 (4)

int a = 12;
char b = Character.forDigit(a , 16);  // a를 16진법으로 변환 (c)
  • char → int / String
1
2
3
4
5
6
7
8
9
10
11
12
char a = 1;
int b = a;  // 더 큰 자료형에 작은 자료형을 할당하면 더 자동 형변환 (아스키 49)
int b = (int) a;  // 강제 형변환 (아스키 49)
int b = Character.getNumericValue(a); // 아스키 아닌 정수 자체의 값 반환 (1)

char a = 'A'
int b = a - '0'  // ‘A’의 10진수 97에 ‘0’의 10진수 80을 뺀 17 반환

char a = 'c';  // char[] a = {'a','b','c','d','e'}; 배열 넣으면 abcde 반환
String b = Character.toString(a);
String b = String.valueOf(a);
String b = a + "";

3. 빠른 입출력 (Fast I/O)

일반적인 ScannerSystem.out.println은 대규모 입력/출력 시 시간 초과될 수 있습니다.
BufferedReaderBufferedWriter를 사용하는 것이 좋습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.io.*;
import java.util.StringTokenizer;  // 문자열 파싱 시 유용

public class Main {
    public static void main(String[] args) throws IOException {  // IOException 처리 필수
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 1. 한 줄 읽기
        String line = br.readLine();

        // 2. 공백 기준 여러 개 입력 (숫자로 변환 시 Integer.parseInt() 사용)
        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());

        // 또는 split() 메서드 사용 (정규식 기반으로 유연하지만 StringTokenizer보다 느릴 수 있음)
        String[] parts = line.split(" ");
        int num1 = Integer.parseInt(parts[0]);

        // 2차원 배열 입력 (예: n x n 행렬)
        int n = Integer.parseInt(br.readLine());
        int[][] map = new int[n][n];
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < n; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        // 3. 출력 (문자열로 변환하여 출력)
        bw.write(String.valueOf(a + b));  // int -> String
        bw.newLine();  // 개행 문자 추가
        bw.write("Sum: " + (a + b) + "\n");
        bw.flush();  // 버퍼 비우기 (필수)

        br.close();  // 스트림 닫기
        bw.close();  // 스트림 닫기
    }
}

4. String 조작

String은 불변(immutable) 객체입니다.

  • str.length() : 문자열 길이
  • str.charAt(index) : 특정 인덱스의 문자
  • str.substring(beginIndex) / str.substring(beginIndex, endIndex) : 부분 문자열 추출
  • str.equals(otherStr) : 문자열 내용 비교 (==는 주소 비교)
  • str.indexOf(char/string) : 특정 문자/문자열의 첫 번째 인덱스
  • str.replaceAll(regex, replacement) : 특정 패턴을 다른 문자열로 치환
  • str.split(regex) : 특정 구분자를 기준으로 문자열 분리하여 String[] 반환
1
2
3
4
String s = "Hello World";
char c = s.charAt(0);  // 'H'
String sub = s.substring(0, 5);  // "Hello"
boolean same = "abc".equals("abc");  // true

5. StringBuilder

문자열을 효율적으로 변경(추가, 삽입, 삭제 등)해야 할 때 사용합니다.
StringBuilder는 가변(mutable) 객체로, String 조작보다 성능이 좋습니다.
(String은 불변 객체라서, + 연산할 때마다 새로운 문자열 객체가 만들어짐 → 비효율적)
(StringBuilder는 내부에서 가변 배열을 사용해서 성능이 훨씬 좋음)

  • StringBuilder sb = new StringBuilder();
  • sb.append(value): 문자열 추가
  • sb.insert(idx, str): 특정 위치에 삽입
  • sb.delete(start, end): 특정 범위 삭제 (start 이상, end 미만)
  • sb.setCharAt(idx, ch): 특정 위치 문자 변경
  • sb.reverse(): 문자열 뒤집기
  • sb.toString(): StringBuilder를 String으로 최종 반환
  • sb.CharAt(idx): 특정 위치 문자 반환
  • sb.length(): 문자열 길이 반환
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 기본 사용법
StringBuilder sb = new StringBuilder();

sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println(sb.toString());  // Hello World

// 반복문에서 문자열 붙일 때
StringBuilder sb = new StringBuilder();

for (int i = 1; i <= 5; i++) {
    sb.append(i).append(" ");
}
System.out.println(sb);  // 1 2 3 4 5

// 마지막 공백 제거
if (sb.length() > 0) {
    sb.setLength(sb.length() - 1); // 마지막 문자 제거 (공백 등)
}
This post is licensed under CC BY 4.0 by the author.