서론
코딩테스트 환경에 따라 자동완성이 가능한 경우도 있습니다만, 저는 지금까지 자동완성이 없었습니다. 어렴풋이 기억하고 있다가 멘탈이 나가는 상황을 방지하기 위해 정리를 한번 해보고자 합니다.
import
import java.util.*;
각종 자료구조, 배열 관련 내용들에 필요합니다.
자료구조
Array, 배열
배열의 선언과 객체화
int[] arr = new int[]; //객체의 생성자인 ()는 붙이지 않는다.
배열 선언과 초기값 지정
int[] arr = {1, 2, 3, 4};
특정 값으로 전체 지정
Arrays.fill(arr, val);
매개변수등으로 넘겨야 하는 경우
class Node<E> {
E value;
Node<E>[] childerns = null;
public Node(E value, Node[] childerns) {
this.value = value;
this.childerns = childerns;
}
}
이러한 Node가 있을 때
Node<Integer> n = new Node<>(1, {new Node<>(2, null), new Node<>(3, null)});
// 사용 불가
Node를 객체화 할 때 위의 방법으로 넣을 수는 없습니다.
Node<Integer>[] childern1 = new Node[3];
Node<Integer>[] childern2 = new Node[2];
childern2[0] = new Node<>(5, null);
childern2[1] = new Node<>(6, null);
childern1[0] = new Node<>(2, childern2);
childern1[1] = new Node<>(3, null);
childern1[2] = new Node<>(4, null);
Node<Integer> root = new Node<>(1, childern1);
이렇게 따로 생성하고 넣어주거나,
Node<Integer> root = new Node<>(1, new Node[]{new Node<>(2, new Node[]{new Node<>(5, null), new Node<>(6, null)}), new Node<>(3, null), new Node<>(4, null)});
new 키워드를 적어줘야 합니다.
배열의 길이
int length = arr.length; //메서드, 함수가 아닌 멤버 변수. 여러번 사용해도 성능에 영향 X
배열 접근
int num = arr[index];
arr[index] = num;
마지막 요소 접근
arr[arr.length - 1]; // last 같은거 없습니다. length-1을 해야합니다.
foreach 사용 가능.
배열 정렬
Arrays.sort(arr);
// dualpivotquicksort (insert + quick)
배열 전체를 string으로 보기좋게 만들기
String sArr = Arrays.toString(arr);
List
선언과 객체화
List<> list = new ArrayList<>();
List<> list = new LinkedList<>();
//리스트 처음과 중간에 삽입, 삭제가 없고 빠른 접근이 필요하다면 ArrayList
//빠른 접근이 아닌 처음과 중간의 삽입,삭제가 필요하다면 LinkedList.
크기
int size = list.size()
접근
list.add(val); // 맨 끝에 추가
list.add(index, val); // 특정 index에 val추가, 기존 값 부터 뒤에 값들은 index 1개씩 밀려남.
int num = list.get(index);
foreach 사용 가능.
정렬
Collections.sort(list);
// timsort (insert + marge)
Stack
LIFO, 후입선출, 나중에 들어간 것이 먼저 나옵니다.
선언과 객체화
Stack<> stack = new Stack<>(); //LinkedList등을 통해 구현하지 않는다. 인터페이스가 아니라 클래스.
크기
int size = stack.size();
boolean isEmpty = stack.isEmpty();
boolean isEmpty = stack.empty();
접근
stack.push(val);
stack.add(val);
int num = stack.pop(); // stack에서 값을 삭제하고 반환
int num = stack.peek(); //stack을 변경하지 않고 반환
stack.clear();
Queue
FIFO, 선입선출, 먼저 들어간 것이 먼저 나옵니다.
선언과 객체화
Queue<> queue = new LinkedList<>(); // Queue는 인터페이스로, 일반적으로 LinkedList로 구현.
크기
int size = queue.size();
boolean isEmpty = queue.isEmpty();
접근
queue.offer(val);
queue.add(val);
int num = queue.poll(); //queue에서 값을 삭제하고 반환
int num = queue.peek(); //queue를 변경하지 않고 반환
queue.clear();
Set, HashSet
순서가 보장되지 않습니다. 중복값을 허용하지 않습니다.
선언과 객체화
HashSet<> set = new HashSet<>();
크기
set.size();
boolean isEmpty = set.isEmpty();
접근
boolean isContains = set.contains(val); // 별도 get 메소드가 없으므로 contains 활용
boolean isSuccess = set.add(val); // 추가 성공시 true, 중복값으로 실패시 false
boolean isSuccess = set.remove(val); // 삭제 성공시 true, 실패시 false
set.clear();
Map, HashMap
순서가 보장되지 않습니다. 중복값을 허용하지 않습니다.
선언과 객체화
HashMap<key, value> map = new HashMap<>();
크기
map.size();
map.isEmpty();
접근
boolean isContains = map.containsKey(key);
map.put(key, value);
Integer value = map.get(key);
boolean isSuccess = map.remove(key);
map.clear();
Set keySet = map.keySet();
Collections values = map.values();
Type
제네릭에는 원시타입을 사용할 수 없습니다.
그럴 때를 대비해 명시적으로 형변환을 하는 방법입니다.
Int
Integer integerNum = new Integer(int);
int num = integerNum.intValue();
int num = Integer.parseInt(string);
Long
Long longRef = new Long(long);
long longNum = longRef.longValue();
long longNum = Long.parseLong(string);
float
Float floatRef = new Float(float);
float floatNum = floatRef.floatValue();
float floatNum = floatRef.parseFloat(string);
double
Double doubleRef = new Double(double);
double doubleNum = double.doubleValue();
double doubleNum = Double.parseDouble();
String
뭔가 string을 만들어야할 때
string + string 하지말고
StringBuilder sb = new StringBuilder();
sb.append(val);
String s = sb.toString();
내부적으로 버퍼를 활용해서 더 나은 성능을 보입니다.
String to char[]
char[] arr = string.toCharArray();
String의 길이
int length = string.length(); // 배열의 length와 구별
char 배열 처럼 index로 접근하기
char c = string.charAt(index);
char c = string.charAt(string.length() - 1); // 마지막 접근
기타 유용한 도구
Math.max(val1, val2); // 두 값 중 최대값 반환
Math.min(val1, val2); // 두 값 중 최소값 반환
System.out.print(string); // 출력만 함. S 대문자 주의
System.out.println(string) // 출력 후 줄바꿈. S 대문자 주의
'SoftwareDo > 알고리즘(코테)' 카테고리의 다른 글
[Java] Tree와 BFS, DFS (child가 여러개) (1) | 2024.05.09 |
---|---|
baekjoon 1914. 하노이 탑 (0) | 2024.05.09 |
[Java] LinkedList로 구현한 Stack과 Queue (0) | 2024.05.08 |
baekjoon 7576. 토마토 (Java, 설명포함) (0) | 2024.05.08 |
leetcode 2. AddTwoNumbers (Java, 설명포함) (0) | 2024.05.08 |