본문 바로가기

분류 전체보기853

공간복잡도(Space Complexity) 보호되어 있는 글 입니다. 2021. 7. 2.
힙(heap) (2) import java.util.ArrayList; import java.util.Collections; public class Heap { //힙(Heap) 이란? //힙 : 데이터에서 최대값과 최소값을 빠르게 찾아내기 위해 고안된 완전 이진 트리(Complete Binary Tree) //완전 이진 트리 : 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 // //힙을 사용하는 이유 : //배열에 데이터를 넣고, 최대값과 최소값을 찾으려면 O(n)이 걸림 //이에 반해 , 힙에 데이터를 넣고, 최대값과 최소값을 찾으려면 O(logn)이 걸림 //우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야 하는 자료구조 및 알고리즘 구현 등에 활용됨 //힙(Heap) 구조 //힙은 최대값을 구하.. 2021. 7. 2.
10 날짜와 시간 & 형식화(1) Calendar와 Date Date는 날짜와 시간을 다룰 목적으로 JDK1.0부터 제공되어온 클래스이다. JDK1.0이 제공하는 클래스의 수와 기능은 지금과 비교할 수 없을 정도로 빈약했다. Date클래스 역시 기능이 부족했기 때문에 , 서둘러 Calendar라는 새로운 클래스를 그 다음 버전인 JDK1.1부터 제공하기 시작했다. Calendar는 Date보다는 훨씬 나았지만 몇 가지 단점들이 발견되었다. 늦은 감이 있지만 JDK1.8부터 'java.time패키지'로 기존의 단점들을 개선한 새로운 클래스들이 추가되었다. 새로 추가된 java.time패키지만 배우면 좋을 텐데, 아쉽게도 Calendar와 Date는 자바의 탄생부터 지금까지 20년이 넘게 사용되어 왔고, 지금도 계속 사용되고 있으므로 배우지.. 2021. 7. 2.
java.lang패키지와 유용한 클래스(8) java.math.BigInteger 클래스 정수형으로 표현할 수 있는 값의 한계가 있다. 가장 큰 정수형 타입인 long으로 표현할 수 있는 값은 10진수로 19자리 정도이다. 이 값도 상당히 큰 값이지만, 과학적 계산에서는 더 큰값을 다뤄야할 때가 있다. 그럴 떄 사용하면 좋은 것이 BigInteger이다. BigInteger는 내부적으로 int배열을 사용해서 값을 다룬다. 그래서 long타입보다 훨씬 큰 값을 다룰 수 있는 것이다. 대신 성능은 long타입밖에 떨어질 수 밖에 없다. final int signum; //부호 1(양수), 0, -1(음수) 셋중 하나 final int[] mag; //값(magnitude) 위의 코드에서 알 수 있듯이, BigInteger는 String처럼 불변(imm.. 2021. 7. 1.
힙(Heap) import java.util.ArrayList; import java.util.Collections; public class Heap { //힙(Heap) 이란? //힙 : 데이터에서 최대값과 최소값을 빠르게 찾아내기 위해 고안된 완전 이진 트리(Complete Binary Tree) //완전 이진 트리 : 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 // //힙을 사용하는 이유 : //배열에 데이터를 넣고, 최대값과 최소값을 찾으려면 O(n)이 걸림 //이에 반해 , 힙에 데이터를 넣고, 최대값과 최소값을 찾으려면 O(logn)이 걸림 //우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야 하는 자료구조 및 알고리즘 구현 등에 활용됨 //힙(Heap) 구조 //힙은 최대값을 구하.. 2021. 7. 1.
java.lang패키지와 유용한 클래스(7) java.util.Random 클래스 난수를 얻는 방법을 생각하면 Math.random()이 떠오를 것이다. 이 외에도 Random클래스를 사용하면 난수를 얻을 수 있다. 사실 Math.random()은 내부적으로 Random클래스의 인스턴스를 생성해서 사용하는 것이므로 둘 중에서 편한 것을 사용하면 된다. 아래의 두 문장은 동등하다. double ranNum = Math.random(); double ranNum = new Random().nextDouble(); //위의 문장과 동일 예를 들어 1~6사이의 정수를 난수로 얻고자 할 때는 다음과 같다. int num = (int)(Math.random() *6) +1; int num = new Random().nextInt(6) + 1; //nextIn.. 2021. 7. 1.