Algorithm/자바 11

자바 comparator

comparator 를 처음부터 끝까지 설명하기는 너무 기니까 그냥 내가 햇갈렸던거 쓸것이다. custom comparator 를 구현할 때 비교하는 게 항상 헷갈렸는데 헷갈린 이유가 있었다. {1,5} 를 정렬할 때 Comparator 안에서 "o1 = 5" "o1 = 1" 로 매개변수가 들어온다. 생각했던거랑 반대로 들어오기 때문에 늘 헷갈려서 죽었던 것이다. "거꾸로 인자가 들어오는데 비교를 하고 리턴이 음수일때 위치를 바꿔라" 로 반드시 기억해두자. c++ 처럼 좀 직관적으로 했으면 참 편할텐데... 아 그리고 람다식으로 쓰는 표현도 알아두자. Arrays.sort(arr, (o1,o2) -> { ...... return 양수하던가 음수 하던가 }); TreeSet ts = new TreeSet(..

Algorithm/자바 2022.03.30

자바 Map

자바 Map 에 대해서 알아보자. Map 인터페이스에는 HashTable, TreeMap, HashMap, 그리고 HashMap 을 상속받는 LinkedHashMap 이 있다. 여기서 HashTable 은 null 값을 넣을 수 없고 thread safe 한데 코딩테스트 문제 푸는데는 thread safe 할 필요가 없다. 그래서 HashTable 은 버리고 TreeMap, HashMap 그리고 LinkedHashMap 에 대해 알아보자. TreeMap, HashMap, LinkedHashMap 은 Set 에 있는 그것들과 똑같다. TreeMap 은 트리구조로, HashMap 은 무순서로 LinkedHashMap 은 집어넣은 순서로 저장된다. HashMap 은 생성할때 초기용량을 넣어줄 수 있고 Tree..

Algorithm/자바 2022.03.09

자바 String & StringBuilder

어느덧 코딩테스트 준비를 c++ 에서 자바로 어느정도 넘어오게 되었다. 넘어오면서 매우 괴로웠다. c++ 에서 힘든 점은 string 다루기가 힘들다는 거였는데 자바는 좀 더 편한 줄 알았는데 아니었다. 똑같이 힘들다... 하.... 넘어온 이유 중에 절반은 string 때문인데.. 하여간 자바의 String 을 간단하게 정리를 해보자 자바의 String 은 불변 객체이다. 그래서 String 에 뭔가 변화를 주는 연산을 하게 되면 변하는 게 아니고 새로운 객체를 만들어서 대입하는 형식으로 이루어진다. 그래서 코테 문제를 풀다보면 가끔 메모리 초과가 난다! 루프 안에서 String 의 변화를 주는 연산을 하면 계속해서 객체가 새로 생성되기 때문에 메모리 초과가 나는 것이다. 이걸 막기 위해, 그리고 St..

Algorithm/자바 2022.03.07

자바 iterator

자바의 iterator() 인터페이스이다. 매우 간단하게 구성되어있다. 사용법을 보자면 Set s = new TreeSet(); Iterator iterator = s.iterator(); while(iterator.hasNext()){ Do something with iterator.next() or iterator.remove() } 이런 꼴로 쓰인다. 여기 예시에는 Set 으로 했지만 iterable 인터페이스 아래에 있는 모든 것들이 된다. 간단하다! 특히 set 에 있는 원소를 출력하려면 이런식으로 해야한다. 자료구조마다 상속받은 iterator 안에서 몇몇 메소드가 추가되어 있지만 웬만하면 이런 식으로 쓰인다.

Algorithm/자바 2022.03.07

자바 ArrayList

아 자바 자바 자바 ArrayList 이다. 생성은 ArrayList al = new ArrayList(); ArrayList al2 = new ArrayList(10); //초기 용량 지정 정도로만 하자 함수들을 알아보면! size() isEmpty() contains(Object o) : true false indexOf(Object o): o의 위치 반환 get(int index) : index 위치 값 반환 set(index, element) : index 위치에 있는 원소를 element 로 변경 add(E e) : 원소 추가 add(int index, E element) : index 위치에 원소 추가 뒤로 한칸 씩 밀린다 remove(int index) : index 위치의 원소 제거 나머지..

Algorithm/자바 2022.03.06

자바 Set

Set 에 대해서 몇가지만 알아보자. Set 인터페이스에는 TreeSet, HashSet 과 HashSet 을 상속하고 있는 LinkedHashSet 이 있다. HashSet 은 무순서 TreeSet 은 트리 구조로 저장 LinkedHashSet 은 넣은 순서대로 저장 Set 은 중복을 허용하지 않는다. 공통적으로 size() isEmpty() contains(Object o) iterator() add() remove(object o) clear() 정도가 있다. HashSet 은 생성할 때 용량을 설정할 수 있고, TreeSet 은 생성할 때 인자로 Comparator 를 넣어 줄 수 있다. Set 에 있는 내용을 출력하려면 iterator 를 사용해야 한다. 혹시 순서가 있는 TreeSet inde..

Algorithm/자바 2022.03.06

자바 PriorityQueue

자바의 우선순위 큐에 대해 알아보자. 우선순위 큐는 내부적으로 힙 구조로 되어 있는 데 이는 생략하고 함수들 쓰는 것만 써보겠다. 우선 생성하는 방법부터 여러가지가 있다. PriorityQueue 생성 PriorityQueue pq = new PriorityQueue(); //생성 PriorityQueue pq2 = new PriorityQueue(5); //용량 5 PriorityQueue pq3 = new PriorityQueue(Collections.reverseOrder()); //역순으로 정렬 PriorityQueue pq4 = new PriorityQueue(5, Collections.reverseOrder()); //용량 5, 역순으로 정렬 우선순위 큐의 인자로 2개가 올 수 있는데 바로 용..

Algorithm/자바 2022.03.06

자바 Queue

자바 자료구조 글에도 되어있듯이 자바는 queue class 가 따로 없더라. 큐는 Queue q = new LinkedList(); 로 시작하고 add() : 원소 추가 만약 용량제한이 있으면 exception 을 던지면서 멸망 offer() : 원소 추가 만약 용량제한이 있으면 그냥 false 반환 remove() : 맨 위 원소 제거 add 와 마찬가지 poll() : 맨 위 원소 제거 offer 와 마찬가지 element(): 맨 위 원소 반환 만약 비어있으면 exception 을 던진다. peek() : 맨 위 원소 반환 만약 비어있으면 null 이다. 추가로 Collection 인터페이스에 있는 size() 함수와 isEmpty() Iterable 인터페이스에 있는 iterator() 함수가 ..

Algorithm/자바 2022.03.05

자바 stack

stack 은 그냥 Stack s = new Stack(); 으로 만들고 push() pop() peek() empty() search() 정도가 있다. 상위 클래스인 Vector 클래스에 있는 size() 함수와 Iterable 인터페이스에 있는 iterator() 함수가 있다. 그리고 여기서 search 는 여기서 알 수 있듯 찾는 원소가 맨 위 원소와 얼마나 떨어져 있는지를 return 한다. 여러개 있으면 맨 위와 가장 가까운 게 얼마나 떨어져 있는지 return 한다. 없으면 -1 스택 배열을 만드는 것을 추가해보자. Stack[] s = new Stack[n]; 을 하고 for(int i=0; i

Algorithm/자바 2022.03.04

자바 deque

자바 deque 에 있는 함수들을 알아보자. 상위 인터페이스나 클래스에 있는 함수들까지 섞이면 굉장히 햇갈려 죽어버리겠으므로 그냥 deque 문제가 나오면 Deque dq = new ArrayDeque(); 로 박아버리고 아래에 있는 함수위주로 쓰자. 추후 더 필요한게 있으면 살짝 추가하자. 매우 직관적이어서 설명할게 별로 없다. 여기에 상위에 있는 함수들이지만 size() isEmpty() clear() iterator() contains() 정도만 알고 있으면 차고 넘칠거 같다.

Algorithm/자바 2022.03.04