본문 바로가기

SoftwareDo/알고리즘(코테)

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

서론

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

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