BackEnd/Java

List의 μ •λ ¬(Sort) - interface : Comparable, Comparator (3)

ejyoovV 2021. 3. 6. 17:54

πŸ’‘ μ‚¬μš©μž μ»€μŠ€ν…€ 클래슀 (VO)객체 생성

학생 클래슀 (ν•™λ²ˆ, 이름, κ΅­μ–΄μ μˆ˜, μˆ˜ν•™μ μˆ˜, μ˜μ–΄μ μˆ˜, 총점, 석차)

클래슀 객체 생성 ν›„ 자료 좜λ ₯

- μƒμ„±μž 생성

- getter setter 생성

- 석차λ₯Ό ꡬ할 λ©”μ„œλ“œ 생성

- toString μ˜€λ²„λΌμ΄λ“œ

package baekjoonProject;

import java.util.ArrayList;
import java.util.List;

public class Main {
	public static void main(String[] args) {
		List<Student> students = new ArrayList<Student>();
		
		students.add(new Student("201263346", "홍길동", 75,65,52));
		students.add(new Student("201263344", "변학도", 70,60,20));
		students.add(new Student("201263343", "강감찬", 75,65,52));
		students.add(new Student("201263341", "μ„±μΆ˜ν–₯", 10,95,83));
		students.add(new Student("201263342", "μ΄μˆœμ‹ ", 75,65,52));
		students.add(new Student("201263345", "일지맀", 75,65,52));
		
		Student.setRanked(students);	
		
		System.out.println("학생 λͺ©λ‘ μ •λ ¬ μ „");
		for(Student stu : students) {
			System.out.println(stu);
		}
	}
}


class Student {
	private String stuNum;
	private String stuName;
	private int kor;
	private int eng;
	private int mat;
	private int subSum;
	private int stuRank;
	
	Student(){
		
	}

	public Student(String stuNum, String stuName, int kor, int eng, int mat) {
//		super(); μƒμ„±μžλŠ” Objectλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ 이것이 없어도 μ»΄νŒŒμΌλŸ¬κ°€ μ•Œμ•„μ„œ μƒμ„±ν•˜μ—¬ ν˜ΈμΆœν•œλ‹€.
		this.stuNum = stuNum;
		this.stuName = stuName;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
		this.subSum = kor + eng + mat;
		this.stuRank = 1;
	}

	public String getStuNum() {
		return stuNum;
	}

	public void setStuNum(String stuNum) {
		this.stuNum = stuNum;
	}

	public String getStuName() {
		return stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMat() {
		return mat;
	}

	public void setMat(int mat) {
		this.mat = mat;
	}

	public int getSubSum() {
		return subSum;
	}

	public void setSubSum(int subSum) {
		this.subSum = subSum;
	}

	public int getStuRank() {
		return stuRank;
	}

	public void setStuRank(int stuRank) {
		this.stuRank = stuRank;
	}
	
	public static void setRanked(List<Student> students) {
		for(Student st1 : students) {
			int rank = st1.stuRank;
			for(Student st2 : students) {
				if(st1.getSubSum() < st2.getSubSum()) {
					rank++;
				}
			}
			st1.setStuRank(rank);
		}
	}

	@Override
	public String toString() {
		return "Student [stuNum=" + stuNum + ", stuName=" + stuName + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat
				+ ", subSum=" + subSum + ", stuRank=" + stuRank + "]";
	}
	
	
}

πŸ’‘ ν•™μƒ ν•™λ²ˆ κΈ°μ€€ μ˜€λ¦„μ°¨μˆœ μ •λ ¬ μ„€μ • (Comparable - compareTo() λ©”μ„œλ“œ κ΅¬ν˜„)

- μ μš©ν•  객체 implements

- compareTo() λ©”μ„œλ“œ κ΅¬ν˜„

- ν•™λ²ˆ κΈ°μ€€ μ˜€λ¦„μ°¨μˆœμ •λ ¬ 리턴 μž…λ ₯

package baekjoonProject;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
	public static void main(String[] args) {
		List<Student> students = new ArrayList<Student>();
		
		students.add(new Student("201263346", "홍길동", 75,65,52));
		students.add(new Student("201263344", "변학도", 70,60,20));
		students.add(new Student("201263343", "강감찬", 75,65,52));
		students.add(new Student("201263341", "μ„±μΆ˜ν–₯", 10,95,83));
		students.add(new Student("201263342", "μ΄μˆœμ‹ ", 75,65,52));
		students.add(new Student("201263345", "일지맀", 75,65,52));
		
		Student.setRanked(students);	
		
		System.out.println("학생 λͺ©λ‘ μ •λ ¬ μ „");
		for(Student stu : students) {
			System.out.println(stu);
		}
		System.out.println("β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– ");
		System.out.println("ν•™λ²ˆ κΈ°μ€€ μ˜€λ¦„μ°¨μˆœ μ •λ ¬ ν›„");
		Collections.sort(students);
		
		for(Student stu : students) {
			System.out.println(stu);
		}
	}
}


class Student implements Comparable<Student>{
	private String stuNum;
	private String stuName;
	private int kor;
	private int eng;
	private int mat;
	private int subSum;
	private int stuRank;
	
	Student(){
		
	}

	public Student(String stuNum, String stuName, int kor, int eng, int mat) {
//		super(); μƒμ„±μžλŠ” Objectλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ 이것이 없어도 μ»΄νŒŒμΌλŸ¬κ°€ μ•Œμ•„μ„œ μƒμ„±ν•˜μ—¬ ν˜ΈμΆœν•œλ‹€.
		this.stuNum = stuNum;
		this.stuName = stuName;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
		this.subSum = kor + eng + mat;
		this.stuRank = 1;
	}

	public String getStuNum() {
		return stuNum;
	}

	public void setStuNum(String stuNum) {
		this.stuNum = stuNum;
	}

	public String getStuName() {
		return stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMat() {
		return mat;
	}

	public void setMat(int mat) {
		this.mat = mat;
	}

	public int getSubSum() {
		return subSum;
	}

	public void setSubSum(int subSum) {
		this.subSum = subSum;
	}

	public int getStuRank() {
		return stuRank;
	}

	public void setStuRank(int stuRank) {
		this.stuRank = stuRank;
	}
	
	public static void setRanked(List<Student> students) {
		for(Student st1 : students) {
			int rank = st1.stuRank;
			for(Student st2 : students) {
				if(st1.getSubSum() < st2.getSubSum()) {
					rank++;
				}
			}
			st1.setStuRank(rank);
		}
	}

	@Override
	public String toString() {
		return "Student [stuNum=" + stuNum + ", stuName=" + stuName + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat
				+ ", subSum=" + subSum + ", stuRank=" + stuRank + "]";
	}

	@Override
	public int compareTo(Student stu) {
		return this.getStuNum().compareTo(stu.getStuNum());
	}
	
	
}

πŸ’‘ ν•™μƒ 총점 κΈ°μ€€ λ‚΄λ¦Όμ°¨μˆœ μΆ”κ°€ μ •λ ¬ μ„€μ • (Compator - compare() λ©”μ„œλ“œ κ΅¬ν˜„)

- 총점이 같은 경우 ν•™λ²ˆκΈ°μ€€ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ κ·Έκ²Œμ•„λ‹ˆλ©΄ μ΄μ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬

- μƒˆλ‘œμš΄ 객체 생성

- 쑰건 μ„€μ •(κ°™μ€κ²½μš°) μ•„λž˜ μ°Έκ³ 

λ‚΄λ¦Όμ°¨μˆœ : -1 (음수)
μ˜€λ¦„μ°¨μˆœ : 1 (μ–‘μˆ˜)
λ³€ν™”μ—†μŒ : 0

if(mem1.getNum() > mem2.getNum()) {
	return -1;//κ·œμΉ™μž„ (음수)
}else if(mem1.getNum() == mem2.getNum()) {
	return 0;//κ·œμΉ™μž„ ( κ°™μŒ)
}else {
	return 1;//κ·œμΉ™μž„ (μ–‘μˆ˜)
}

πŸ“ μΆ”κ°€ μ •λ ¬ κ·œμΉ™μ— λŒ€ν•œ 클래슀 생성

String μ—λŠ” μ •λ ¬ λ©”μ„œλ“œ compareTo κ°€ κ΅¬ν˜„λ˜μ–΄ 있음. 

Integer μ—λŠ” μ •λ ¬ λ©”μ„œλ“œ compare κ°€ κ΅¬ν˜„λ˜μ–΄ 있음.

λ‘˜λ‹€ λ‚΄λ¦Όμ°¨μˆœμ΄λ―€λ‘œ κ²°κ³Ό 뒀에 -1을 곱함. μΈμžκ°’μ€ λ©”μ„œλ“œμ— 맞게 λ„˜κ²¨μ€Œ.

class SortSubSum implements Comparator<Student>{

	@Override
	public int compare(Student stu1, Student stu2) {
		if(stu1.getSubSum() == stu2.getSubSum()) {
			return stu1.getStuNum().compareTo(stu2.getStuName()) * -1;
		}else {
			return Integer.compare(stu1.getSubSum(), stu2.getSubSum()) * -1;
		}
	}
	
}

πŸ“κ²°κ³Ό 확인

package baekjoonProject;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {
	public static void main(String[] args) {
		List<Student> students = new ArrayList<Student>();
		
		students.add(new Student("201263346", "홍길동", 75,65,52));
		students.add(new Student("201263344", "변학도", 70,60,20));
		students.add(new Student("201263343", "강감찬", 75,65,52));
		students.add(new Student("201263341", "μ„±μΆ˜ν–₯", 10,95,83));
		students.add(new Student("201263342", "μ΄μˆœμ‹ ", 75,65,52));
		students.add(new Student("201263345", "일지맀", 75,65,52));
		
		Student.setRanked(students);	
		
		System.out.println("학생 λͺ©λ‘ μ •λ ¬ μ „");
		for(Student stu : students) {
			System.out.println(stu);
		}
		System.out.println("β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– ");
		System.out.println("ν•™λ²ˆ κΈ°μ€€ μ˜€λ¦„μ°¨μˆœ μ •λ ¬ ν›„");
		Collections.sort(students);
		for(Student stu : students) {
			System.out.println(stu);
		}
		System.out.println("β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– ");
		System.out.println("총점 λ‚΄λ¦Όμ°¨μˆœ, 단 총점이 같을 λ•Œ 총점 λ‚΄λ¦Όμ°¨μˆœ");
		Collections.sort(students, new SortSubSum());
		for(Student stu : students) {
			System.out.println(stu);
		}
	}
}


class Student implements Comparable<Student>{
	private String stuNum;
	private String stuName;
	private int kor;
	private int eng;
	private int mat;
	private int subSum;
	private int stuRank;
	
	Student(){
		
	}

	public Student(String stuNum, String stuName, int kor, int eng, int mat) {
//		super(); μƒμ„±μžλŠ” Objectλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ 이것이 없어도 μ»΄νŒŒμΌλŸ¬κ°€ μ•Œμ•„μ„œ μƒμ„±ν•˜μ—¬ ν˜ΈμΆœν•œλ‹€.
		this.stuNum = stuNum;
		this.stuName = stuName;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
		this.subSum = kor + eng + mat;
		this.stuRank = 1;
	}

	public String getStuNum() {
		return stuNum;
	}

	public void setStuNum(String stuNum) {
		this.stuNum = stuNum;
	}

	public String getStuName() {
		return stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMat() {
		return mat;
	}

	public void setMat(int mat) {
		this.mat = mat;
	}

	public int getSubSum() {
		return subSum;
	}

	public void setSubSum(int subSum) {
		this.subSum = subSum;
	}

	public int getStuRank() {
		return stuRank;
	}

	public void setStuRank(int stuRank) {
		this.stuRank = stuRank;
	}
	
	public static void setRanked(List<Student> students) {
		for(Student st1 : students) {
			int rank = st1.stuRank;
			for(Student st2 : students) {
				if(st1.getSubSum() < st2.getSubSum()) {
					rank++;
				}
			}
			st1.setStuRank(rank);
		}
	}

	@Override
	public String toString() {
		return "Student [stuNum=" + stuNum + ", stuName=" + stuName + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat
				+ ", subSum=" + subSum + ", stuRank=" + stuRank + "]";
	}

	@Override
	public int compareTo(Student stu) {
		return this.getStuNum().compareTo(stu.getStuNum());
	}
}

class SortSubSum implements Comparator<Student>{

	@Override
	public int compare(Student stu1, Student stu2) {
		if(stu1.getSubSum() == stu2.getSubSum()) {
			return stu1.getStuNum().compareTo(stu2.getStuName()) * -1;
		}else {
			return Integer.compare(stu1.getSubSum(), stu2.getSubSum()) * -1;
		}
	}
	
}