문제 풀이/도구정리

[도구정리] 코딩 테스트 문법 정리(JAVA)

27200 2024. 4. 24. 21:41

QUEUE

Queue<E> q = new LinkedList<>();

.add() / .offer(): 큐에 값을 넣는 메서드 -> 차이: add는 큐에 공간이 없으면 IllegalStateException을 발생시키고, offer은 false를 반환한다.

.poll() / .remove(): 큐에 값을 빼는 메서드 -> 차이: remove는 큐에 요소가 없다면 NoSuchElementException을 발생시키고, poll은 null을 반환한다.

.peek(): 큐의 가장 앞 요소를 보기만 하는 메서드. 꺼내지는 않는다.

.size() : 큐의 현재 크기를 반환하는 메서드

.isEmpty(): 큐가 비어있다면 true를, 비어있지 않다면 false를 반환한다.

.contains(): 큐에 해당하는 요소가 있는지를 반환한다. 있다면 true, 없다면 false를 반환한다.

PriorityQueue<Integer> sortedNumbers = new PriorityQueue<>((o1, o2) -> {
    int x = Math.abs(o1);
    int y = Math.abs(o2);
    if(x == y){
        return o1 > o2 ? 1 : -1;
    }
    return x - y;
});

백준 11286번에서 볼 수 있는 우선순위 큐.

우선순위 큐는 내가 원하는 순서에 따라 값을 정렬해주는 자료구조이다.

값이 양수라면 o1,o2의 순서를 바꾸고 음수라면 그대로 간다.

 PriorityQueue<Integer> sortedNumbers = new PriorityQueue<>(Comparator.reverseOrder());

.Comparator.reverseOrder()를 사용하여 내림차순으로 정렬한 것이다. ()를 그냥 쓰면 오름차순이 된다.


정렬


Arrays.Sort() -> int[] 같은 곳에서 사용

 

Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

해석하자면 다음과 같다. o1 o2의 위치를 정할 것이다. ex) o1 = 9, o2 =3이면 39<->비교 93 뒤의 93이 더 크다. 즉 순서를 유지한다.(o1과 o2를 그대로 둬라!) -> 내림차순 정렬 가능 #여기서 사용된 arr은 string형이다. 즉 그런 것도 가능하다.

 

Arrays.sort(arr, Comparator.reverseOrder()): 내림차순 정렬을 하는 방식이다. 다만 주의할 점은, int[]가 아닌 Integer[]과 같이 래퍼클래스를 사용해야 한다. 


Collections.sort() -> ArrayList<Integer> 같은 곳에서 사용

 

Collections.sort(arr, Comparator.reverseOrder()):  내림차순 정렬을 하는 방식이다.


String~~~


StringTokenizer st = new StringTokenizer(br.readLine());

 

st.nextToken(): 원하는 대로 자른 기준에 맞춰 하나의 단위로 존재하게 된다. 위의 문장 처럼 일반적으로 문장을 읽어온다 하면 띄어쓰기를 기준으로 구분하게 된다.

 

st.countTokens(): 토큰의 개수가 몇개 남아있는지 카운트 한다. 이를 이용해 정해지지 않은 문장의 길이를 받아와서 이용할 때 효율적이다.

 

st.hasMoreTokens(): 토큰이 남은 것이 있나 확인한다. 위와 마찬가지로 정해지지 않은 문장의 길이를 받아서 이용할 때 효율적이다.


StringBuilder sb = new StringBuilder();

 

sb.append(str) : 문자열을 만들 수 있게 문자를 더해준다.

 

.toString()를 필요로 하지않고 그냥 System.out.println(sb)로 출력 가능하다.


String s = ~~;

 

s.charAt(index) : 특정 위치에 있는 것을 char자료형으로 바꿔준다.

(s.charAt(j) >= 'a' && s.charAt(j) <= 'z' || s.charAt(j) >= 'A' && s.charAt(j) <= 'Z') 같이 알파벳의 위치를 찾을 수도 있다.

(알파벳 소문자 or 대문자의 경우 -'a' or -'A' 를 하면 우리가 알고 있는 알파벳 순서가 나온다! 물론 0번부터)

 

s.substring(start index, finish index): 문자열의 특정 구간을 잘라올 수 있다. 대신 원본 문자열이 변경되는 것은 아니다! 또한 문자 하나를 char자료형이 아닌 string자료형으로 저장하고 싶을 때 써도 좋다.