📄문제
N명의 학생의 수학점수가 입력되면 각 학생의 석차를 입력된 순서대로 출력하는 프로그램을 작성하세요.
⬇️ 입력
첫 줄에 N(1<=N<=100)이 입력되고, 두 번째 줄에 수학점수를 의미하는 N개의 정수가 입력된다. 같은 점수가 입력될 경우 높은 석차로 동일 처리한다. 즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다. 점수는 100점 만점이다.
5 90 85 92 95 90 |
⬆️ 출력
첫 줄에 입력된 순서대로 석차를 출력한다.
3 5 2 1 3 |
📝 풀이
#include <iostream>
#include <vector>
int main()
{
int scores[100];
int rank = 1;
int resRank[100];
int N;
scanf_s("%d", &N);
for (int i = 0; i < N; ++i)
scanf_s("%d", &scores[i]);
for (int i = 100; i >= 0; --i)
{
int currentRank = rank;
for (int j = 0; j < N; ++j)
{
if (scores[j] == i)
{
resRank[j] = currentRank;
++rank;
}
}
}
for (int i = 0; i < N; ++i)
printf("%d ", resRank[i]);
}
- 100점부터 1등을 주기 위해 거꾸로 반복문을 수행합니다.
- 전체 배열에서 동일한 점수대는 같은 등수를 부여하고, 등수를 부여한 개수만큼 증가시켜 다음 등수에 반영합니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] N!의 표현법 (0) | 2023.10.13 |
---|---|
[C++] 마라톤 (0) | 2023.10.13 |
[C++] Jolly Jumpers(유쾌한 점퍼) (0) | 2023.10.13 |
[C++] 연속 부분 증가수열 (0) | 2023.10.13 |
[C++] 온도의 최대값 (0) | 2023.10.13 |