🤯 코딩테스트/C/C++
[it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비] 코드구현력 기르기 - 석차 구하기
kangkibong
2022. 8. 28. 01:32
문제
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>
#include <vector>
using namespace std;
int main() {
int n, i, j;
scanf("%d", &n);
vector<int> arr(n);
vector<int> ch(n, 1);
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
if(arr[i] < arr[j]) {
ch[i]++;
}
}
}
for(i = 0; i < n; i++) {
printf("%d ", ch[i]);
}
return 0;
}
설명
사용자로부터 학생수 N을 입력받는다.
학생의 점수를 할당받을 N크기의 vector를 선언한다. 또한 학생들의 석차를 확인하기 위해 N크기의 vector를 선언하고 값을 모두 1로 초기화한다.
N만큼 입력받는 for문을 작성하여 학생들의 점수를 입력받고 arr에 할당한다.
한 학생의 점수가 다른 학생들의 점수와 비교했을 때 낮을 경우를 counting하기 위해 2중 for문을 사용하여 완전탐색을 시도한다.
다른 학생의 점수가 한 학생의 점수보다 높을 경우 해당 ch vector에서 j에 해당하는 값을 1씩 증가해나간다.
이후 학생들의 석차를 출력하기 위해 N번 반복하여 ch vector에 해당하는 모든 값들을 출력한다.
배운 점
1. 브루트포스(완전탐색): brute는 무식한, force는 힘을 뜻하므로 가능한 모든 경우의 수를 탐색하는 알고리즘 기법을 의미한다.
2. vector 값 초기화: 선언과 동시에 자동으로 0으로 초기화된다. 만약 특정 m값으로 모두 초기화할 경우vector<int> arr(n, m);을 사용한다.
해당 내용은 김태원님의 'it 취업을 위한 알고리즘 문제풀이' 강의를 듣고 작성한 글입니다.