카테고리 없음

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<>();