본문 바로가기
혼자서 개발새발

JAVA) 전교 등수를 계산해보자!!

by 휴일이 2022. 10. 15.

총점으로 전교등수를 계산하고

총점이 높은 순에서 낮은 순(내림차순)으로 정렬해서 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이 아니기에)

그 사람의 총점과 등수가 이전 총점,이전 등수에 저장되는 것 부터가 시작이다

 

 

분석하고 내가 외운대로(전제 조건 대로)

클론 코딩을 했더니 다행히 돌아가더라ㅠㅠ휴...

원리를 터득했다

 

아이패드가 분석할 때 활용도가 매우 높다 ^.^b

 

뭔가 만드는 건 할만한데

문제를 푸는 건 너무 어렵다....

나는야 빠가사리

728x90