본문 바로가기

Algorithm

코딩테스트 자주사용하는 코드 (JAVA)

반응형

 

여러 코딩테스트를 하다보면 VS Code, 이클립스같은 IDE를 사용하지 못하는 코딩테스트가 있다.

또한 요즘 코로나로 퍼지면서 실시간 녹화와 원격으로 감시하기 때문에 검색을 하거나, IDE의 자동완성에 대한 힘을 빌리지 못한다.

 

그렇기 때문에 여러가지 코드들을 공유하고자 한다.

 

Import

import java.util.*;

import는 java.util.* 하나만 선언하면 대부분의 라이브러리 함수, 콜렉션 함수들을 사용할 수있다. 코딩테스트시 이거하나 선언하고 시작하면 함수를 찾지 못한다는 에러는 만나지 않을 것이다.

 

Sort 함수

int[] arr = {1,3,4,5,6};
Arrays.sort(arr);

정말 자주 사용한다. 

 

Math 함수

int answer = 1;
answer = Math.max(answer,100);
// answer : 100

다음과 같은 형태로 answer을 항상 최고값으로 사용할 때 쓰는 방법이다. (반대로 min도 가능하다.)

 

Collection 함수들 사용법 

public class PQ implements Comparable<PQ> {
    int a;
    int b;

    public PQ(int a, int b) {
        super();
        this.a = a;
        this.b = b;
    }

    @Override
    public int compareTo(PQ o) {
        return this.a - o.a;
    }
}

Collection 함수들인 경우 Integer, String을 사용하지만 편의를 위해 내가 설정한 class 파일을 어떻게 다루는가 보겠다.

다음과 같이 class 속성중 compareTo를 재정의 함으로써 Collecttion의 함수들을 사용할 수 있다.

 

PriorityQueue

Queue<Integer> MinHeap = new PriorityQueue<>();
Queue<Integer> MaxHeap = new PriorityQueue<>(Comparator.reverseOrder());

우선순위큐는 다잌스트라, minheap,maxheap을 이용한 문제들을 다룰 때 쉽게 사용한다.

 

Map, Set

Map<String, Integer> hash = new TreeMap<String, Integer>();
Map<String, Integer> hashGenres = new TreeMap<String, Integer>();
Set<Pair> set[] = new TreeSet[100];

hash.put(value, hash.getOrDefault(value, 0) + plays[i]);

if (!hashGenres.containsKey(value)) {
    hashGenres.put(value, genersNum++);
}

for (int i = 0; i < 100; i++)
    set[i] = new TreeSet<>();

 

문자열을 나누는 방법 split도 있지만 StringTokenizer를 소개한다.

StringTokenizer st = new StringTokenizer(operation);
String order = st.nextToken();
int num = Integer.parseInt(st.nextToken());

문자열을 하나하나 입력하고 정답을 뒤로 출력하고 싶을때는

StringBuilder sb = new StringBuilder();
sb.reverse();

문자열을 부분부분 필요한것만 얻고 싶을 때

str.substring(3, 6); 
// 0부터 시작하는 인덱스에서 3번째부터 6번 미만까지 (즉 5번째)

 

2차원 ArrayList를 만들고 싶을 때 (즉 동적으로 바뀌는 3차워 배열을 만들고 싶을 때 사용하는 방법)

static ArrayList<Integer>[][] map;
map = new ArrayList[N + 1][N + 1];
for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) {
        map[i][j] = new ArrayList<Integer>();
    }
}

마지막으로는 list를 순회하는 방법 (Iterator를 사용하면 순회하면서 제거하는게 가능하기 때문에 편한다)

for (Iterator<Pair> it = list.iterator(); it.hasNext();) {
    Pair p = it.next();
    if(p.a == 5)
    	it.remove();
}
반응형

'Algorithm' 카테고리의 다른 글

레드 블랙트리  (0) 2020.10.15
CCW  (0) 2020.05.03
강한 연결 요소 java  (0) 2020.04.29
트라이(Trie) : JAVA / 백준 5052  (0) 2020.04.26
이분 매칭 알고리즘 ( JAVA),열혈강호1,2,3 문제  (0) 2020.04.25