코딩테스트에서 자주 사용되는 Java 문법들을 정리했습니다.
1. 자료형 (Data Types)
- 기본 자료형 (Primitive Types)
int
, long
: 정수 (크기에 따라 선택)double
: 실수boolean
: 논리값 (true/false)char
: 단일 문자
- 참조 자료형 (Reference Types)
String
: 문자열 객체Integer
, Long
등 래퍼 클래스 (Wrapper Classes): 기본 자료형을 객체 형태로 다룰 때 사용 (ex. 컬렉션에 저장)- 사용자 정의 클래스, 배열 등 모든 객체는 참조 자료형
2. 형 변환 (Type Conversion)
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)
|
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)
일반적인 Scanner
나 System.out.println
은 대규모 입력/출력 시 시간 초과될 수 있습니다.
BufferedReader
와 BufferedWriter
를 사용하는 것이 좋습니다.
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); // 마지막 문자 제거 (공백 등)
}
|