SoftwareDo/알고리즘(코테)

[Java] 자동완성이 없는 환경을 위한 총정리

휴보로 2024. 5. 9. 16:37

서론

코딩테스트 환경에 따라 자동완성이 가능한 경우도 있습니다만, 저는 지금까지 자동완성이 없었습니다. 어렴풋이 기억하고 있다가 멘탈이 나가는 상황을 방지하기 위해 정리를 한번 해보고자 합니다.

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 대문자 주의