코딩 테스트를 풀다 보면 알고리즘 자체보다 Java 문법이나 기본 API가 손에 익지 않아서 시간이 걸릴 때가 있다. 자주 쓰는 배열, 리스트, 문자열 메서드는 따로 외운다기보다 여러 문제를 풀면서 바로 떠올릴 수 있을 정도로 익혀두는 편이 좋다.
배열
배열은 크기가 고정된 자료구조다. 인덱스로 바로 접근할 수 있고, 길이는 arr.length로 확인한다. 배열 전체를 출력할 때는 그냥 System.out.println(arr)을 쓰면 주소처럼 보이기 때문에 Arrays.toString을 사용한다.
int[] arr = new int[5];
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));
int[] copied = Arrays.copyOf(arr, arr.length);2차원 배열처럼 중첩된 배열을 확인할 때는 Arrays.deepToString이 편하다.
int[][] board = new int[3][3];
System.out.println(Arrays.deepToString(board));리스트
리스트는 크기가 동적으로 변하는 자료구조가 필요할 때 자주 쓴다. 보통 ArrayList를 가장 많이 사용하고, 값 추가와 삭제, 크기 확인, 정렬이 기본 패턴이다.
List<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.remove(Integer.valueOf(10));
System.out.println(list.size());
Collections.sort(list);
System.out.println(list);list.remove(1)처럼 숫자를 넘기면 인덱스 삭제로 해석된다. 값 자체를 지우고 싶다면 Integer.valueOf(1)처럼 객체로 감싸서 넘기는 점을 조심해야 한다.
문자열
문자열에서는 길이, 자르기, 비교, 문자 배열 변환을 많이 쓴다. Java에서는 문자열 비교를 ==로 하지 않고 equals로 해야 한다.
String str = "algorithm";
int length = str.length();
String part = str.substring(0, 4);
boolean same = str.equals("algorithm");
char[] chars = str.toCharArray();
int index = str.indexOf('r');
String[] words = str.split(" ");입력과 문자열 조립
입력은 문제 유형에 따라 Scanner, BufferedReader를 고르게 된다. 간단한 문제에서는 Scanner가 편하지만, 입력이 많으면 BufferedReader와 StringTokenizer를 쓰는 편이 안전하다.
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
String text = scanner.nextLine();문자열을 반복해서 붙일 때는 StringBuilder를 사용하는 것이 좋다. 반복문 안에서 +로 문자열을 계속 만들면 매번 새로운 문자열이 생겨 비효율적일 수 있다.
StringBuilder sb = new StringBuilder();
sb.append("Hello, ");
sb.append("World!");
String result = sb.toString();마지막으로 continue와 break는 반복문 흐름을 정리할 때 자주 쓴다. continue는 현재 반복만 건너뛰고 다음 반복으로 넘어가고, break는 반복문 자체를 끝낸다. 조건이 복잡한 문제에서는 이 둘을 적절히 쓰면 중첩을 조금 줄일 수 있다.