Coding Test

코테를 위한 Java 문법 정리

짱정연 2024. 10. 24. 23:33
반응형

 

 평소 C++을 코테 주 언어로 사용하는데, 백엔드 직무의 경우 Java로 코테를 응시해야 하는 경우가 있어 벼락치기용으로 Java 문법을 정리하고자 한다. (틈틈이 업데이트 중)

 

입출력

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());
        int k = Integer.parseInt(st.nextToken());
        
      	String str = br.readLine();

        System.out.println(n);
        System.out.println(m);
        System.out.println(k);
        System.out.println(str);
    }
}

 

 

  • BufferedReader가 Scanner보다 빠르다.
  • 정수 타입 변수인 n, m, k를 저장할 때 str.nextToken()의 결과는 String 타입이고, 숫자 타입으로 저장하기 위해 parseInt 과정이 필요하다.

 

length, length(), size()

  • length: 배열의 길이
  • length(): 문자열(String)의 길이
  • size(): 컬렉션의 요소의 개수
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers.length);

String text = "Hello, World!";
System.out.println(text.length());

ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.size());

 

String

문자열 뒤집기

String str = "abcde";
StringBuffer sb = new StringBuffer(str);
str = sb.reverse().toString();

 

문자열 비교

==의 경우 참조 주소를 비교하므로, 값을 비교할 때는 equals()를 사용하자

 

2차원 ArrayList를 배열로 변환

int[][] answer = new int[arr1.length][arr1[0].length];

for (int i = 0; i < result.size(); i++) {
    for (int j = 0; j < result.get(0).size(); j++) {
        answer[i][j] = result.get(i).get(j);
    }
}

 

ArrayList 정렬

// 오름차순
Collections.sort(list);

// 내림차순
Collections.sort(list, Collections.reverseOrder());

// 커스텀 정렬 with 람다식
list.sort((Integer a, Integer b) -> {
	return a - b;
});

 

Pair

자바에는 C++의 pair나 tuple 같은 자료형을 제공하지 않으므로 클래스로 직접 구현해야 한다.

static class Pair {
	int x;
    int y;
    
    Pair(int x, int y) {
    	this.x = x;
        this.y = y;
    }
}

Queue<Pair> q = new LinkedList<>();
q.offer(new Pair(1, 2));

 

큐와 우선순위 큐

  • offer(): 원소 추가, 값 추가 실패 시 false 반환
  • poll(): 첫 번째 값을 반환하고 제거, 비어있으면 null
  • peek(): 값을 꺼내지 않고 확인만

add, remove는 실패 시 에러가 발생하므로 offer, poll을 사용하자. 큐와 우선순위 큐 둘 다 함수는 동일하다.

 

큐를 구현할 때 구현체로 LinkedList와 ArrayDeque를 사용할 수 있지만, 메모리와 속도 측면에서 ArrayDeque가 더 많은 장점을 가지고 있다.

// 큐 선언
Queue<Integer> q = new ArrayDeque<>();

// 우선순위 큐 선언 1 (작은 숫자 먼저)
PriorityQueue<Integer> pq = new PriorityQueue<>();

// 우선순위 큐 선언 2 (큰 숫자 먼저)
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

q.offer(1);
q.offer(6);
q.offer(2);

while(!q.isEmpty()) {
	System.out.println(q.poll());
}

 

HasmMap 순회

Map<String, String> map = new HashMap<>();

for (String key : map.keySet()) {
	map.get(key);
}

 

리스트 회전

List<Integer> arr = new ArrayList<>();
for (int i = 0; i < 5; i++) {
	arr.add(i);
}

System.out.println(arr); // [0, 1, 2, 3, 4]
Collections.rotate(arr, 1);
System.out.println(arr); // [4, 0, 1, 2, 3]
반응형