본문 바로가기

자료구조와 알고리즘3

[JAVA] - Comparable과 Comparator를 활용한 객체 정렬 이번에는 지난 글에서 다뤘던 Comparable과 Comparator를 활용하여 정렬해보는 시간을 가져보겠습니다. 지난 글을 전부 이해하셨다면 이번 글은 금방 이해하실 수 있을겁니다. 두 인터페이스를 간단히 정리해보면 이렇습니다. Comparable - compareTo(T o) 추상 메서드를 가진 인터페이스 (자신과 객체 o를 비교) Comparator - compare(T o1, T o2) 추상 메서드를 가진 인터페이스 (o1 객체와 o2 객체를 비교) 그리고 여기서 한가지 알고 가셔야 할 점이 있습니다. 대부분 프로그래밍에서의 정렬은 오름차순이 디폴드입니다. 오름차순의 특징을 한번 볼까요? {1, 2, 3, 4, 5} 보시면, 앞의 값이 뒤에 값보다 작습니다. 그러면 앞의 값 - 뒷 값 을 하면 음.. 2023. 2. 5.
[JAVA] - Comparable과 Comparator의 차이 및 이해 우리는 무언가를 비교할 때 부등호를 이용해서 하죠. 예를들어 10과20을 비교할 때, 우리는 무엇이 큰지를 판단 할 수 있고 컴퓨터도 와 같은 비교연산자를 통해 바로 결과를 알려주죠. 그런데, 자바는 객체지향 언어입니다. 물론 그 속에 어떤 정수나, 실수 같은 값들을 연산할 일도 분명 많이 있지만, 객체끼리의 비교는 어떻게 할까요? 클래스에는 다양한 인스턴스 변수가 있습니다. 만약 Student 라는 클래스에 나이(age)와 반(classNumber)가 있다고 가정해 봅시다. 그리고 생성자를 통해 나이와 반을 매개변수로 받습니다. class Student { int age; int classNumber; Student(int age, int classNumber) { this.age = age; this.. 2023. 2. 5.
검색 알고리즘 - 선형 탐색(Linear Search), 이진 탐색(Binary Search) 선형 탐색 - Linear Search 배열에서의 여러 탐색 알고리즘이 있지만, 그 중 제일 간단하고 단순한 알고리즘이 바로 선형 탐색 입니다. 개인적으로 이게 과연 알고리즘이라고 할 수 있을까...? 싶지만 개발을 처음 접해보시거나 알고리즘을 처음 공부하시는 분들에게는 탐색이라는 개념을 잘 알려주는 방법이 아닐까 싶습니다. 바로 예시를 들어보자면, 아래와 같이 정수를 담은 arr 배열은 1~9 까지의 원소를 갖고 있습니다. int [] arr = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9}; 여기서 8이라는 값은 어디에 위치하는지 알고 싶습니다. 그냥 컴퓨터에게 "8번째 있어" 라고 알려주고 싶지만 그럴 수 없겠죠... 그러면 우리가 컴퓨터에게 시킬 수 있는 방법 중 제일 간단한.. 2023. 2. 4.