본문 바로가기

문제풀이/C++

[C++] 석차 구하기

728x90

[문제]

학생 수를 입력받고, 학생 수 만큼 점수를 입력받아 석차를 출력한다.

이때, 동점일 경우 같은 석차로 처리하며 다음 등수는 + 같은 석차를 받은 학생 수 이다.

 

[입력예제]

5
90 85 92 95 90

 

[출력예제]

3 5 2 1 3

 

총 5명의 학생의 점수를 입력받았으며, 가장 높은 점수는 95점으로 네번째 학생 석차는 1등이다.

그 다음으로는 92점으로 세번째 학생은 2등, 90점을 받은 학생은 둘이므로 첫번째 학생과 다섯번째 학생은 공동 3등.

85점은 최하점으로 점수상에서는 네번째지만 3등 석차가 2명이었으므로 두번째 학생은 5등이 되었다.


[코드]

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, const char * argv[]) {
    
    int n;
    
    //1
    cin >> n;
    
    vector<int> student(n);
    vector<int> rank(n);
	
    //2
    for(int i=0; i<n; i++) {
        rank[i] = 1;
        cin >> student[i];
    }
    
    //3
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(student[i]<student[j]) rank[i]++;
        }
    }
    
    //4
    for(int i=0; i<n; i++) cout << rank[i] << " ";
    
    return 0;
}

 

[설명]

  1. 학생 수를 입력받는다. (n)
  2. n만큼 반복하여 모든 석차를 1등으로 초기화 시키며, 학생들의 성적(student[i])을 입력받는다. 
  3. 이중 for문을 통해 i번째 학생이 j번째 학생보다 점수가 낮으면 i번째 학생의 석차를 올려준다.
  4. n만큼 반복하며 석차를 출력한다.

 

[실행결과]

728x90
반응형

'문제풀이 > C++' 카테고리의 다른 글

[C++] N!의 표현법  (0) 2021.01.17
[C++] 마라톤  (0) 2021.01.16
[C++] Jolly Jumpers  (0) 2021.01.11
[C++] 연속 부분 증가수열  (0) 2021.01.10
[C++] 온도의 최대값  (0) 2021.01.10