Post

Java 코딩테스트용 문법, 메소드 정리

여느때처럼 파이썬으로 주구장창 문제 풀다가
양심의 가책을 느낄 때쯤 자바로 쉬운 문제 하나씩 풀면서 죄책감을 씻어내고 있었는데..

또 Java로만 응시 가능한 코딩테스트가 나타나고 말았다..😇


항상 Python으로 코딩테스트를 준비해왔는데, 주로 Java 백엔드를 지원하다보니 코테에서 Java만 쓰도록 제한하는 기업이 적지 않게 있었다.

기억나는 곳은 NHN커머스, 엔씨소프트, 폴라리스오피스, 우테캠, 그외 몇몇 스타트업들 정도가 있었다.
엔씨소프트는 Python도 사용 가능했는데 지난 하반기엔 C++, Java만 지원했고, 11번가는 제한을 뒀었는데 지원언어를 늘린것 같다. 아무튼 몇몇 기업들은 항상 일정하진 않은 모양이다.

이참에 확실히 정리해놓고 써먹으려고 코테 하루 전에(엥?) 다급하게 문법과 메소드를 정리해본다..


라이브러리

1
2
import java.util.*;
import java.io.*;


String

String은 문자 추가, 삭제 등 변경이 불가능한 타입

1
String s = "abc123";
OperationExampleNote
길이s.length() 
빈 값 여부s.isEmpty()비었으면 true
i번째 문자s.charAt(i) 
문자 위치 (처음)s.indexOf('c') 
문자 위치 (마지막)s.lastIndexOf('c') 
서브스트링 (시작, 끝)s.substring(srt, end)srt ~ end-1
서브스트링 (시작)s.substring(srt)srt ~ 끝
문자 대체s.replace(s1, s2)문자열 s1을 s2로 치환
같은지 비교s.equals("abc")같으면 true
값 비교s.compareTo("abc")같으면 0, s가 더 앞이면 -1, 뒤면 1
시작값s.startsWith("abc") 
끝값s.endsWith("abc") 
포함 여부s.contains("abc")포함하면 true
쪼개기 (구분자)s.split(" ")구분자로 분리 -> String[] 배열 반환
쪼개기s.split()한 문자씩 분리 -> String[] 배열 반환
앞뒤 공백 제거s.trim() 
대문자로 변경s.toUpperCase() 
소문자로 변경s.toLowerCase() 
반복s.repeat(n)s를 n번 반복한 문자열 반환
문자열 변환String.valueOf(obj)obj가 null이면 “null” 반환
문자열 변환obj.toString()obj가 null이면 NPE
문자열 -> 숫자 변환Integer.parseInt("10") 
숫자 -> 문자열 변환Integer.toString(300) 


StringBuilder

StringBuilder는 변경 가능한 타입이므로 문자열을 변경해야 하는 문제에서 사용

1
StringBuilder sb = new StringBuilder();
OperationExampleNote
추가sb.append("abc") 
삽입sb.insert(i, "abc") 
삭제sb.delete(srt, end)srt ~ end-1 문자열 삭제
i번째 삭제sb.deleteCharAt(i) 
i번째 변경sb.setCharAt(i, 'x') 
문자열 뒤집기sb.reverse() 
길이 줄이기sb.setLength(3)길이를 3으로 줄임
길이 늘이기sb.setLength(10)길이를 10으로 늘임 (공백으로 채워짐)


Array

1
2
int[] arr = {1, 2, 3};
String[] arr = new String[n];
OperationExampleNote
길이arr.length 
출력Arrays.toString(arr) 
정렬 (오름차순)Arrays.sort(arr) 
정렬 (내림차순)Arrays.sort(arr, Collections.reverseOrder()) 
일부 정렬Arrays.sort(arr, srt, end)srt ~ end-1 만 정렬
이분탐색Arrays.binarySearch(arr, x) 
값 채우기Arrays.fill(arr, value) 
값 채우기 (시작, 끝)Arrays.fill(arr, srt, end, value)srt ~ end-1 만 채우기
복사Arrays.copyOf(arr, size)0번째 부터 size만큼 복사
복사 (시작지점 설정)Arrays.copyOfRange(arr, srt, size)srt부터 size만큼 복사
리스트로 변환 (고정)Arrays.asList(arr)원본 배열 변경시 리스트 값도 변경, 리스트에 값 추가 불가
리스트로 변환 (가변)new ArrayList<>(Arrays.asList(arr))원본 배열과 동기화하지 않음, 리스트에 값 추가 가능


Collections

OperationExampleNote
최대값Collections.max(list) 
최소값Collections.min(list) 
정렬 (오름차순)Collections.sort(list) 
정렬 (내림차순)Collections.sort(list, Collections.reverseOrder()) 
뒤집기Collections.reverse(list) 
개수Collections.frequency(list, x) 
이분탐색Collections.binarySearch(list, x)없으면 ‘-들어갈위치-1’을 반환
복사Collections.copy(from, to)from의 모든 객체를 to에 복사해 반환
서로소 여부Collections.disjoint(c1, c2)전부 다르면 true


List

1
List<String> list = new ArrayList<>();
OperationExampleNote
길이list.size() 
빈 값 여부list.isEmpty() 
추가list.add(x) 
i번째에 추가list.add(i, x) 
모든 객체 추가list.addAll(list2)list의 뒤에 list2의 모든 값 삽입
i번째에 모든 객체 추가list.addAll(i, list2)list의 i에 list2의 모든 값 삽입
i번째 값list.get(i) 
i번째 변경list.set(i, x) 
특정 값 위치 (처음)list.indexOf(x)없으면 -1
특정 값 위치 (마지막)list.lastIndexOf(x) 
i번째 삭제list.remove(i) 
특정 값 삭제list.remove(x) 
특정 값들 삭제 (람다식)list.removeIf(x -> x%2 == 0)람다식을 만족하는 값들 삭제
특정 값들 삭제list.removeAll(list2)list 원소 중 list2에 있는 값들 삭제
특정 제외 값들 삭제list.retainAll(list2)list 원소 중 list2에 없는 값들 삭제
전체 삭제list.clear() 
슬라이싱list.subList(srt, end)srt ~ end-1 부분리스트 반환
정렬list.sort()오름차순
포함 여부list.contains(x)있으면 true
포함 여부 (여러개)list.containsAll(list2)list에 list2의 모든 값이 있으면 true
배열로 변환list.toArray(new String[list.size()]) 


Map

키-값 형식의 자료구조

  • HashMap: 특정 규칙 없이 출력됨.
  • LinkedHashMap: 키가 입력순으로 정렬되어 출력됨.
  • TreeMap: 키가 알파벳순(오름차순)으로 정렬된 상태로 출력됨.

☑️ 주의
HashMap의 경우 데이터가 저장공간보다 더 추가되면 한 번에 약 2배로 늘리기 때문에 과부하가 많이 발생할 수 있으므로,
저장할 데이터의 개수를 알고 있다면 미리 용량을 설정하는 편이 좋음.

1
2
3
4
5
6
Map<Integer, String> map = new HashMap<>();

// 키-값 접근
for (Entry<Integer, String> entry: map.entrySet()) {
	System.out.println(entry.getKey() + entry.getValue());
}
OperationExampleNote
추가map.put(k, v)해당 키가 이미 존재하면 값을 변경
조회map.get(k)해당 키가 없으면 null 반환
삭제map.remove(k)파라미터로 키를 전달
전체 삭제map.clear() 
키 존재 여부map.containsKey(k) 
값 존재 여부map.containsValue(v) 
모든 키map.keySet() 
모든 값map.values() 
모든 키-값map.entrySet()Entry 객체 Set을 반환


Set

중복을 허용하지 않는 자료구조

  • HashSet : 순서x 정렬x
  • LinkedHashSet : 삽입된 순서대로 순서를 관리. 순서o 정렬x
  • TreeSet : 이진탐색트리 형태로 데이터를 저장. 순서x 정렬o
1
2
3
4
5
6
7
8
9
10
11
12
Set<Integer> set = new HashSet<>();

// 원소 접근
// 방법 1. 이터레이터
Iterator iter = set.iterator();
while (iter.hasNext()) {
	System.out.println(iter.next());
}
// 방법 2. for-each
for (Integer item: set) {
	System.out.println(item);
}
OperationExampleNote
길이set.size() 
추가set.add(x) 
삭제set.remove(x) 
포함 여부set.contains(x) 
합집합set.addAll(c)주어진 컬렉션의 모든 객체를 추가
차집합set.removeAll(c)주어진 컬렉션의 객체와 같은 원소를 제거
부분집합set.containsAll(c)주어진 컬렉션의 모든 객체를 포함하는지 확인
교집합set.retainAll(c)주어진 컬렉션의 객체와 동일한 것만 남기고 삭제
전체 삭제set.clear() 


Stack

1
Stack<Ingeger> stack = new Stack<>();
OperationExampleNote
길이stack.size() 
추가stack.push(x) 
삭제stack.pop() 
Top 출력stack.peek()비어있으면 null 반환
전체 삭제stack.clear() 
빈 값 여부stack.empty() 
포함 여부stack.contains(x) 


Queue

1
Queue<Integer> q = new LinkedList<>();
OperationExampleNote
길이q.size() 
빈 값 여부q.isEmpty() 
추가q.offer(x)맨 뒤에 삽입
삭제q.poll()맨 앞 값 반환, 삭제
맨 앞q.peek()맨 앞 값 반환
전체 삭제q.clear()공백 큐


우선순위큐

LinkedList로 구현하는 큐와 사용하는 메소드 유사

1
2
Queue<Integer> pq = PriorityQueue<Integer>();   // 최소힙
Qeueu<Integer> pq = PriorityQueue<Integer>(Collections.reverseOrder()); // 최대힙

특정 기준으로 정렬하고 싶을 때 다음을 이용

  1. implements Comparable하여 compareTo 오버라이딩
  2. pq 선언시 Comparator 생성하여 compare 오버라이딩


Math 라이브러리

OperationExampleNote
큰 값Math.max(n1, n2) 
작은 값Math.min(n1, n2) 
절대값Math.abs(n) 
n 제곱Math.pow(base, n) 
제곱근Math.sqrt(n) 
반올림Math.round(n)소수점 첫번째 자리에서 반올림
내림Math.floor(n) 
올림Math.ceil(n) 



참고

알고리즘을 위한 자바 함수 정리
[Java] 코딩테스트 문법 속성 정리 (1)
[Java] 코딩테스트 문법 속성 정리 (2)
[JAVA] 코딩테스트용 주요 함수 모음

This post is licensed under CC BY 4.0 by the author.