카테고리 없음
Java 코딩테스트 reminders
happyst
2025. 2. 7. 13:16
1. 입력받기
- BufferedReader 사용 방법 - StringTokenizer 사용 X
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String[] inputStrings = input.split(" "); // StringTokenizer 사용 안하고 split 하는 방법
System.out.println(Arrays.toString(inputStrings));
}
}
- BufferedReader 사용 방법 - StringTokenizer 사용 O
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
System.out.printf("%d, %d\n", N, M);
}
}
- 입력받은 숫자 개수를 모를때 - StringTokenizer 사용하는 방법
- while(st.hasMoreTokens()) {}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()) {
System.out.println(Integer.parseInt(st.nextToken()));
}
}
}
2. Array, ArrayList
- Array: 크기가 고정됨. 한 번 선언하면 크기를 변경할 수 없음.
int[] arr = new int[5]; // 크기가 5로 고정됨
- ArrayList: 크기가 동적으로 변함. 요소를 추가하거나 삭제하면 자동으로 크기가 조정됨.
ArrayList<Integer> list = new ArrayList<>(); // 크기 제한 없음
3. 정렬
기본형 (primitive)
- 오름차순
- Arrays.sort(arr)
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = {5, 3, 8, 1, 2};
Arrays.sort(arr); // 오름차순 정렬
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 5, 8]
}
}
- 내림차순 : Wrapper 클래스로 변경해야 함!!!!!!!
- Arrays.sort(Arr, Collections.reverseOrder());
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
int[] arr = {5, 3, 8, 1, 2};
// int[] -> Integer[] 변환
Integer[] arrInteger = Arrays.stream(arr).boxed().toArray(Integer[]::new);
Arrays.sort(arr, Collections.reverseOrder()); // 내림차순 정렬
System.out.println(Arrays.toString(arr)); // [8, 5, 3, 2, 1]
}
}
Wrapper형
- 오름차순: Arrays.sort(arr);
- 내림차순: Arrays.sort(arr, Collections.reverseOrder());
4. ArrayList<Integer> list = new ArrayList<>(); vs List<Integer> list = new ArrayList<>();
5. 문자열에서 특정 인덱스 접근 : charAt(int index)
public class Main {
public static void main(String[] args) {
String str = "Hello, Java!";
// 문자열의 0번째 인덱스 접근
char firstChar = str.charAt(0);
System.out.println(firstChar); // 'H'
}
}
6. 배열의 깊은 복사 - 주소값 복사 X 데이터만 복사 O
- Arrays.copyOf(원본배열, 복사할 길이)
- Arrays.copyOfRange(원본 배열, 복사할 시작 인덱스, 복사할 끝 인덱스)
7. 배열 초기화 : Arrays.fill(배열명, 초기화할 값)
int[] arr = new int[10];
Arrays.fill(arr, 1); // 1로 전부 초기화
8. 함수 매개변수로 배열 넘기기
- 원본을 변경하고 싶다면 → 그냥 배열을 매개변수로 전달
- 원본을 변경하고 싶지 않다면 → 배열을 복사해서 전달
9. 객체가 아닌 원시 데이터 타입은 메서드 호출 불가
Integer a = 1; // 메서드 호출 가능 (ex. a.equals(b))
int a = 1; // 메서드 호출 불가능
10. 커스텀 정렬
primitive 타입 int[ ] arr
- Wrapper 타입으로 변환 후
Arrays.sort(arr, (a,b) -> {정렬 로직});
Wrapper 타입 Integer[ ] arr
Arrays.sort(arr, (a,b) -> {정렬 로직});
ArrayList 타입 ArrayList<Integer> list
list.sort((a,b) -> {정렬 로직});
11. Stack, Queue, Set, Map
Stack
// 선언
Stack<Integer> stack = new Stack<>();
// top 값 조회
int top = stack.peek();
// push
stack.push(1);
// pop
stack.pop();
// empty 확인
stack.isEmpty()
Queue
// Pair 클래스
class Pair {
int first, second;
Pair(int first, int second) {
this.first = first;
this.second = second;
}
}
// Queue 선언
Queue<Pair> queue = new LinkedList<>();
// push
queue.offer(pair);
// pop
Pair front = queue.poll();
// empty 확인
queue.isEmpty()
Set
// 선언
Set<Integer> set = new HashSet<>();
// push
set.add(3);
set.add(1);
set.add(2);
set.add(3); // 중복된 값은 저장되지 않음
// 출력 - 순서 유지 X
System.out.println(set); // 예: [1, 2, 3] (순서 랜덤)
// 포함 여부 확인
System.out.println(set.contains(2)); // true
System.out.println(set.contains(5)); // false
Map
// 선언
Map<String, Integer> map = new HashMap<>();