문제
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++) : 코딩테스트 대비
'C C++ > C C++ 알고리즘 문제 기타' 카테고리의 다른 글
[C/C++] 코드업 1901 : (재귀 함수) 1부터 n까지 출력하기 (0) | 2022.10.04 |
---|---|
[C/C++] 마라톤 (1) | 2022.09.28 |
[C/C++] 유쾌한 점퍼 (Jolly Jumper) (0) | 2022.09.27 |
[C/C++] swea 1220. [S/W 문제해결 기본] 5일차 - Magnetic (1) | 2022.09.25 |
[C/C++] swea 1209. [S/W 문제해결 기본] 2일차 - Sum (1) | 2022.09.24 |
댓글