🏃‍♀️ 코테 연습

25. 석차 구하기

ji-hyun 2021. 6. 11. 17:22

이 문제의 저작권은 인프런 강의 "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