총점으로 전교등수를 계산하고
총점이 높은 순에서 낮은 순(내림차순)으로 정렬해서 list를 출력
public static void calculateSchoolRank(List<Student> list) {
Collections.sort(list); // 먼저 list를 총점기준 내림차순으로 정렬한다.
int prevRank = -1; // 이전 전교등수
int prevTotal = -1; // 이전 총점
int length = list.size();
for(Student s : list) { //리스트에 객체 하나씩 돌림
if(prevTotal==s.total) { //이전 점수와 내 점수가 같다면
s.schoolRank=prevRank; //이전 등수를 내 등수에 저장
length--; //남은 인원에서 -1
} else { //랭크는, 총인원에서 남은인원+1로 계산
s.schoolRank= list.size()-length+1; //10-10+1 해야 1등이 계산 됨,
length--; //남은 인원에서 -1
}
prevTotal=s.total; //이전 객체의 총점을 이전 총점에 넣음
prevRank=s.schoolRank; //이전 객체의 등수를 이전 등수에 넣음
}
}
}
(해당 클래스만 넣었다)
결과
머리 싸매다가 못 풀겠어서
답지를 보고 코드 분석을 했다
분석 후 알게된 점? 고려해야할 점 ?
1. 총점은 이미 내림차순으로 정렬되어 있다
2. 한명씩(한 객체씩)비교할 때마다 총 인원은 -1씩 줄어야 한다
3. 전에 비교했던 사람의 총점을 이전 총점으로 넣고,
그 총점과 다음 사람의 총점이 같으면 ->
이전 사람의 랭크와 내 랭크도 같아야한다
4. 처음 사람은 무조건 else 문으로 넘어간다(총점이 -1이 아니기에)
그 사람의 총점과 등수가 이전 총점,이전 등수에 저장되는 것 부터가 시작이다
분석하고 내가 외운대로(전제 조건 대로)
클론 코딩을 했더니 다행히 돌아가더라ㅠㅠ휴...
원리를 터득했다
뭔가 만드는 건 할만한데
문제를 푸는 건 너무 어렵다....
나는야 빠가사리
728x90
'혼자서 개발새발' 카테고리의 다른 글
JAVA,Oracle) 오라클과 자바를 연동해서 행을 추가, 수정, 삭제 해보자! (0) | 2022.10.25 |
---|---|
JAVA) 멀티쓰레드를 이용해 영화관에서 티켓을 팔자! (0) | 2022.10.20 |
JAVA) 사용자 정의 예외 만들기 (0) | 2022.10.14 |
JAVA) 문자열로 되어 있는 숫자를 int로 변환 후, 최댓값 최솟값 구하기 (1) | 2022.10.13 |
JAVA) 예외 처리를 이용해 중복 이름 거르기 (0) | 2022.10.13 |