이 문제의 저작권은 인프런 강의 "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 에 있습니다.
문제 25
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 <stdio.h>
using namespace std;
int main(){
//freopen("input.txt", "rt", stdin);
int i, n, j;
int a[200], b[200];
scanf("%d", &n);
for(i=1; i<=n; i++){
scanf("%d", &a[i]);
b[i]=1;
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
if(a[i]<a[j]) b[i]++;
}
}
for(i=1; i<=n; i++){
printf("%d ", b[i]);
}
return 0;
}
이 문제는 간단하지만 부끄럽게도 아이디어를 생각하지 못했다.
"제일 큰 것을 어떻게 찾지?" 하면서 생각이 막혔다. (max 라는 함수도 없고....난관에 봉착..)
이 코드의 알고리즘을 살펴보면 두 개의 배열이 필요하다. 하나는 점수를 입력 받을 배열, 나머지 하나는 석차를 매겨줄 배열이 있다.
1. 먼저 점수를 입력 받는데, 이때 석차 배열은 1로 모두 초기화해준다.
2. 이중 for문을 이용해서 i=1 일때 j=1~5 까지 돌면서, a[ i ] < a[ j ] 가 되면 b[ i ] 의 석차 등수를 올려준다. 이때 자기자신과의 비교는 항상 '=' 이므로 등수가 올라가지 않는다.
3. 석차 배열을 출력해준다.
'🏃♀️ 코테 연습' 카테고리의 다른 글
26. 말아톤 (0) | 2021.06.19 |
---|---|
스터디 1일차 (0) | 2021.06.17 |
24. Jolly Jumpers (0) | 2021.06.10 |
23. 연속 부분 증가수열 (0) | 2021.06.09 |
22. 온도의 최댓값 (1차원 배열 구간합 : 제한시간 1초) (0) | 2021.02.04 |