티스토리 뷰

반응형

⊙ 문제

 

가격 순서대로 정렬할 수 있는 Book 클래스와 다음 실행 결과가 나타나도록 테스트 프로그램을 작성하시오. Book 클래스에는 int 타입의 price 필드가 있으며, 생성자와 필요한 메서드를 포함한다. 또 테스트 프로그램은 3개의 Book 객체로 구성된 Book 배열을 사용해 가격 순서대로 정렬한 후 출력한다.

 


배열 books를 정렬하려면 Arrays.sort(books)를 호출하면 된다.

 


 

⊙ 문제 접근 과정

 

Book 클래스와 출력 메서드를 작성하였다. 그 후 main함수에서 Book 클래스의 배열 books을 만들어 출력하고 sort를 한 후 출력했는데 오류가 나왔다.가격 순서대로 정렬할 수 있는 Book 클래스와 다음 실행 결과가 나타나도록 테스트 프로그램을 작성하시오. Book 클래스에는 int 타입의 price 필드가 있으며, 생성자와 필요한 메서드를 포함한다. 또 테스트 프로그램은 3개의 Book 객체로 구성된 Book 배열을 사용해 가격 순서대로 정렬한 후 출력한다.

 

우선 오류가 난 코드를 보자.

 

import java.util.Arrays;

class Book {
    int price;

    Book(int price) {
        this.price = price;
    }

    void print() {
        System.out.println("Book [price="+price+"]");
    }
}

public class  {
    public static void main(String[] args) {
        Book[] books = {new Book(15000),new Book(50000),new Book(20000)};

        System.out.println("정렬 전");
        for (Book b : books)
            b.print();

        Arrays.sort(books);

        System.out.println("정렬 후");
        for (Book b : books)
            b.print();
    }
}

 

왜 오류가 발생했는가?

 

정답은 Arrays.sort(books) 부분이다. 배열 books에 대해 정렬을 시도했지만 무엇을 정렬할지 알려주지 않았기 때문이다.

우리가 정의해줘야한다.

 

무엇을 정의해줘야 하나?

 

기준을 잡아줘야 한다. 어떤 변수를 배열해줄지를.

 

 

그래서 추가한 코드가 class Book 뒤에 implements Comparable를 추가해줬다.

잊지 말자! 자바에서 정렬이 나오면 제일 먼저 Comparable, Comparator를 떠올리자

 

 


 

Comparator 관련 문제를 찾는다면 아래 문제를 참고해보자.

한번 풀어보길 추천한다.

 

tooo1.tistory.com/23

 

[백준(BOJ)] 1181번 : 단어 정렬 - JAVA[자바]

www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는

tooo1.tistory.com


 

 

Comparable을 해줬으면 그다음 compareTo를 override 해줘야 한다.

 

왜 override를 해줘야 하나?

우리가 원하는 정렬을 하기 위해서이다.

 

다음으로는 compareTo() 메서드 작성법에 대해 다뤄보자.

 

 


compareTo() 메서드 작성법

 

  • 현재 객체 < 파라미터로 넘어온 객체 : return -1
  • 현재 객체 == 파라미터로 넘어온 객체 : return 0
  • 현재 객체 > 파라미터로 넘어온 객체 :  return 1
  • -1 or 0 : 객체 자리 유지
  • 1 : 두 객체의 자리 변경

 

⊙ 문제 풀이

 

import java.util.Arrays;

class Book implements Comparable{
    int price;

    Book(int price) {
        this.price = price;
    }

    void print() {
        System.out.println("Book [price="+price+"]");
    }

    @Override
    public int compareTo(Object o) {
        Book book = (Book) o;

        if(this.price < book.price)
            return -1;
        else if (this.price > book.price)
            return 1;
        else
            return 0;
    }
}

public class Main {
    public static void main(String[] args) {
        Book[] books = {new Book(15000),new Book(50000),new Book(20000)};

        System.out.println("정렬 전");
        for (Book b : books)
            b.print();

        Arrays.sort(books);

        System.out.println("정렬 후");
        for (Book b : books)
            b.print();
    }
}

 

 


⊙ 결과

 

 


⊙ 마무리

 

 

자바에서 정렬이 나오면 제일 먼저 Comparable, Comparator를 떠올리자

 

 

좋아요 로그인하지 않아도 누를 수 있습니다!

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함