📄문제

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
bonnate