본문 바로가기
C C++/C C++ 알고리즘 문제 기타

[C/C++] 석차 구하기

by Go! Jake 2022. 9. 28.

문제

N명의 학생의 수학점수가 입력되면 각 학생의 석차를 입력된 순서대로 출력하는 프로그램을
작성하세요.

 

입력설명
첫 줄에 N(1<=N<=100)이 입력되고, 두 번째 줄에 수학점수를 의미하는 N개의 정수가 입력된
다. 같은 점수가 입력될 경우 높은 석차로 동일 처리한다. 즉 가장 높은 점수가 92점인데 92
점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다. 점수는 100점 만점이다.

 

출력설명
첫 줄에 입력된 순서대로 석차를 출력한다.

문제풀이

전형적인 브루트포스 알고리즘 문제라고 할 수 있음. 브루트포스 알고리즘은 쉽게 얘기해서 모든 경우를 다 따진다고 볼 수 있는 데, 석차 구하기에서는 각 한 명씩 모든 사람과 비교하는 절차를 거치게 되므로 브루트포스 알고리즘을 사용하는 것임.

 

코드는 간단함. 이중 for문을 사용하여, i가 현재 비교 대상인 학생이고 j는 비교할 각 학생을 돌아가면서 선택하는 것임. 이 때 i보다 j 인덱스 값이 큰 경우 석차를 하나씩 올리도록 하면 됨. 즉 모든 경우의 수를 다 비교하는 것임.

	for (int i=0; i<N; i++)
	{
		cnt=1;
		for (int j=0; j<N; j++)
		{
			if (arr[i]<arr[j])
			{
				cnt++;
			}
		}
		rank[i]=cnt;
	}

 

소스코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	int N=0;
	int cnt=0;
	cin>>N;
	int arr[N]={0,};
	int rank[N]={0,};
	
	for (int i=0; i<N; i++)
	{
		cin>>arr[i];
	}
		
	for (int i=0; i<N; i++)
	{
		cnt=1;
		for (int j=0; j<N; j++)
		{
			if (arr[i]<arr[j])
			{
				cnt++;
			}
		}
		rank[i]=cnt;
	}
	
	
	for (int i=0; i<N; i++)
	{
		cout<<rank[i]<<" ";
	}
	
	
	return 0;
}

Reference

it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비

댓글